私はAndroid開発を学んでいます。私は非常に簡単なはずの何かで立ち往生しています。
1つのアクティビティ、2つのフラグメント、1つのインターフェースを備えたアプリを作成しています。
Android:minSdkVersion="11"
Android:targetSdkVersion="19
したがって、メインアクティビティでは、マネージャを使用してフラグメントBへの参照を作成しようとしています。 Eclispseがいくつかの変更を指示しているため、ここで行き詰まります(以下を参照)。
私の意図: `
@Override
public void respond(int i) {
// TODO Auto-generated method stub
FragmentManager manager =getFragmentManager();
FragmentB f2= (FragmentB) manager.findFragmentById(R.id.fragment2);
}`
これを行うと、エラーメッセージが表示され、いくつかの変更を実行する必要があります。変更後、コードは次のようになります(そして、まだFragmentBに到達できません):
@Override
public void respond(int i) {
// TODO Auto-generated method stub
Android.app.FragmentManager manager =getFragmentManager();
Android.app.Fragment f2= manager.findFragmentById(R.id.fragment2);
}
詳細については、アクティビティのインポートヘッダーもここに配置します。
package com.example.modular_ui;
import Android.support.v7.app.ActionBarActivity;
import Android.support.v7.app.ActionBar;
import Android.support.v4.app.Fragment;
import Android.support.v4.app.FragmentManager;
import Android.app.Activity;
import Android.os.Bundle;
import Android.view.LayoutInflater;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.view.ViewGroup;
import Android.os.Build;
public class MainActivity extends Activity implements Communicator{....
ここで何が欠けていますか? support.v4 /support.v7全体は、新人にとって少し混乱します。
編集:に変更した後:
import Android.app.Fragment;
import Android.app.FragmentManager;
AND FragmentActivityを拡張するまだFragmentBへの参照を作成できません:
@Override
public void respond(int i) {
// TODO Auto-generated method stub
FragmentManager man = getFragmentManager();
FragmentB b = man.findFragmentById(R.id.fragment2);
}
リクエストに応じて、FragmentBコードを投稿しました。
package com.example.modular_ui;
import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.TextView;
public class FragmentB extends Fragment {
TextView text;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_b, container);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
text = (TextView) getActivity().findViewById(R.id.textView1);
}
メインXML
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context="com.example.modular_ui.MainActivity"
tools:ignore="MergeRootFrame" >
<fragment
Android:id="@+id/fragment1"
Android:name="com.example.modular_ui.FragmentA"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
<fragment
Android:id="@+id/fragment2"
Android:name="com.example.modular_ui.FragmentB"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_below="@+id/fragment1"
Android:layout_marginTop="54dp" />
</RelativeLayout>
まず第一に:あなたの活動はFragmentActivityを拡張する必要があります。
サポートライブラリについて。これらは、古いAndroidにいくつかの機能を追加するために導入されました。たとえば、フラグメントはAndroid 3.0(SDK nr:11)で導入されました。実際、Android 3.0では(ドキュメントによると)<サポートライブラリはフラグメントのシステム実装を使用します。
GetSupportFragmentManager();を使用するだけです。 、サポートライブラリを正常に追加した後。
OPは、API 11以降support.v4を必要とせずにで正常に機能するソリューションに非常に近かった。
彼は、importステートメントでsupport.v4も使用しないように、Fragmentを変更する必要がありました。
2つのアプローチの要約。 すべてのアクティビティとフラグメントには、これらの1つのように見えるコードが必要です。それらを混ぜないでください! (すべてのファイルですべての行が必要なわけではありません。必要に応じて行を使用してください。)
support-v4アプローチ
import Android.support.v4.app.FragmentActivity;
import Android.support.v4.app.Fragment; <-- ".support.v4"
import Android.support.v4.app.FragmentManager;
... MainActivity extends FragmentActivity ...
... = getSupportFragmentManager();
.... YourFragment extends Fragment ... <-- same in both approaches
API 11+アプローチ
import Android.app.Activity;
import Android.app.Fragment;
import Android.app.FragmentManager;
... MainActivity extends Activity ...
... = getFragmentManager();
.... YourFragment extends Fragment ... <-- same in both approaches
したがって、上記の1つのアプローチを使用して記述されたプロジェクトがあり、他の場所からコードに統合している場合は、必ずこれらの行を探し、現在の行に一致するように変更してください。
簡単だ。
古いデバイス(APIレベル11未満)でもアプリを実行する場合は、getSupportFragmentManager()
を使用します。
APIレベルが11を超えるデバイスでアプリを実行する場合は、getFragmentManger()
を使用します。