Tôi có một viewPager đơn giản với hai đoạn. Mỗi mảnh chứa một TextView. Tôi muốn có thể cập nhật văn bản của textView hiện tại được hiển thị từ hoạt động.Làm cách nào để cập nhật nội dung phân đoạn khỏi hoạt động (chế độ xem)?
Hoạt động:
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);
}
}
Adaptor:
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();
}
}
Fragment:
public class Live extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.live, container,false);
}
}
XML Fragment:
<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>
Mỗi đoạn có một TextView với id "trạng thái". Cập nhật chế độ xem văn bản trong onCreateView
hoạt động. Nhưng làm thế nào tôi có thể cập nhật textView từ bất cứ nơi nào trong hoạt động?
Tôi đã cố gắng này mà không có succes:
Fragment:
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;
}
}
Hoạt động:
@Override
protected void onResume() {
super.onResume();
Live frag = (Live) pagerAdapter.getItem(0);
frag.tv.setText("Test 2");
}
Nhưng nó mang lại cho tôi một NullPointerException trên tv
, có lẽ vì các mảnh vỡ chưa tăng cao.
Tôi đã đọc các câu hỏi sau đây mà không thành công:
- Updating fragments from Activity in a ViewPager
- Update a TextView in a ViewPager from another Fragment
này là 100% đúng. Tôi đã phạm sai lầm tương tự như OP. KHÔNG giữ mảng của riêng bạn 'Fragment's.'FragmentManager' trong' FragmentPagerAdapter' nắm giữ tất cả 'Fragment's và quản lý việc lưu và phục hồi trạng thái của chúng. Chúng cũng có thể được tham chiếu - http://stackoverflow.com/questions/8785221/retrieve-a-fragment-from-viewpager/14530629#14530629. –
Ok đã sử dụng: http://tamsler.blogspot.fr/2011/10/android-viewpager-and-fragments.html và giải pháp thứ hai của http://tamsler.blogspot.fr/2011/11/android-viewpager -and-fragments-part-ii.html. Nhưng từ những gì tôi đã có kinh nghiệm nó không thể truy cập vào đoạn trong ngày tạo hoặc tiếp tục trong hoạt động phải không? – grunk
Nó có lẽ không phải là awailable/inflated tại thời điểm đó. Tại sao bạn không sử dụng vòng đời của những mảnh vỡ? – faceman