我正在开发一个Android应用程序,我需要在FragmentActivity
内基于同一个类创建多个片段。目前,我的代码主要基于官方文档中的this example,除了我为每个片段实例化相同的类:
@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
类中,我尝试访问单个片段,然后通过执行以下操作访问其View:
getItem(number).getView();
但它会返回null
。 (getItem()
返回正确的片段,但getView()
返回null。
我还阅读this solution,但如果我在Fragment
中声明了TextView,请添加方法setTextView(String s)
并从FragmentActivity
调用它,它会生成NullPointerException。< / p>
那么,是否有一种特定的方式来分别访问我的片段中的布局项?谢谢!
答案 0 :(得分:2)
如果你有片段:frag1,frag2,frag3等,你可以使用frag1.getView()。findViewById()将范围限制在那个片段,因为每个片段都扩展了同一个类。
示例:
TextView frag1text = (TextView)frag1.getView().findViewById();
答案 1 :(得分:0)
在片段的onCreateView中记得保存指向视图的指针。然后你总能说出myPointer.findViewById();为了得到你的观点的子项目。
答案 2 :(得分:0)
好的,最后我重新开始并将我的代码基于this,并且它有效。