内に同じクラスに基づく複数のフラグメントが必要な Android アプリケーションを開発していますFragmentActivity
。今のところ、私のコードはほとんどが公式ドキュメントのこの例に基づいていますが、各フラグメントに対して同じクラスをインスタンス化しています:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_tabs_pager);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mViewPager = (ViewPager)findViewById(R.id.pager);
mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager);
mTabsAdapter.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab 1"), MyFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab 2"), MyFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab 3"), MyFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("tab4").setIndicator("Tab 4"), MyFragment.class, null);
if (savedInstanceState != null) {
mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
}
}
クラスMyFragment
は非常に単純です。
public class MyFragment extends Fragment {
View v;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (container == null) {
return null;
}
v = inflater.inflate(R.layout.test, container, false);
return v;
}
}
Fragment クラスによって拡張されたレイアウトをシンプルな TextView に単純化しました。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/test_textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/some_default_value"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
つまり、インスタンス化された後test_textView1
、各フラグメントの値を個別に変更できるようにしたいと考えています。私の問題は、フラグメントのレイアウトの要素にアクセスできないことです。すべてのフラグメントに影響するため、このメソッドを直接使用することはできません。クラス内で、単一のフラグメントにアクセスしてから、次のようにしてそのビューにアクセスしようとしました。findViewById()
TabsAdapter
getItem(number).getView();
しかし、それは戻りますnull
。(getItem()
正しいフラグメントをgetView()
返しますが、null を返します)。
私もこの解決策を読みましたが、自分Fragment
で TextView を宣言すると、メソッドを追加しsetTextView(String s)
てから呼び出すとFragmentActivity
、NullPointerException が生成されます。
では、フラグメント内のレイアウト項目に個別にアクセスする特定の方法はありますか? ありがとう!