我有一个简单的viewPager与两个片段。每个片段都包含一个TextView。我希望能够更新从活动中显示的当前textView的文本。如何从活动(viewpager)更新片段内容?
活动:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
ArrayList<Fragment> fragments = new ArrayList<Fragment>();
fragments.add(Fragment.instantiate(this, Live.class.getName()));
fragments.add(Fragment.instantiate(this, Hit.class.getName()));
this.pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(),fragments);
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(pagerAdapter);
}
}
适配器:
public class MyPagerAdapter extends FragmentPagerAdapter {
private final ArrayList<Fragment> fragments;
public MyPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments)
{
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
片段:
public class Live extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.live, container,false);
}
}
XML片段:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:text="First Fragment"
android:id="@+id/status"/>
</LinearLayout>
每个片段有id为 “状态” 一个TextView。 更新onCreateView
工程中的文本视图。但是,我怎样才能从活动的任何地方更新textView?
我已经试过这一点没有更迭:
片段:
public class Live extends Fragment {
public TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.live, container,false);
tv = (TextView) view.findViewById(R.id.status);
return view;
}
}
活动:
@Override
protected void onResume() {
super.onResume();
Live frag = (Live) pagerAdapter.getItem(0);
frag.tv.setText("Test 2");
}
但它给我的tv
一个NullPointerException,大概是因为片段还没有膨胀。
我已经读了下面的问题没有成功:
- Updating fragments from Activity in a ViewPager
- Update a TextView in a ViewPager from another Fragment
这是100%正确的创建适配器这样
然后。我已经和OP一样犯了同样的错误。不要保留你自己的'片段'数组。FragmentPagerAdapter中的FragmentManager包含所有的Fragment,并管理保存和恢复状态。他们也可以被引用 - http://stackoverflow.com/questions/8785221/retrieve-a-fragment-from-viewpager/14530629#14530629。 – 2013-02-28 14:31:45
确实使用了:http://tamsler.blogspot.fr/2011/10/android-viewpager-and-fragments.html和http://tamsler.blogspot.fr/2011/11/android-viewpager的第二个解决方案-and-fragments-part-ii.html。但从我所经历的情况来看,无法在创建或恢复活动时访问片段? – grunk 2013-02-28 15:24:50
当时可能并不令人满意。为什么不使用片段自己的生命周期? – faceman 2013-02-28 15:48:18