Tôi không quen với FragmentPagerAdapter
, vì vậy đây sẽ là một trong những câu hỏi mà chúng tôi (bạn) đọc mô tả một cách nghiêm túc.FragmentPagerAdapter với ViewPager và hai Mảnh vỡ. Chuyển đến phần đầu tiên từ phần thứ hai và cập nhật văn bản đầu tiên
Cấu trúc: Tôi có FragmentPagerAdapter
(mã bên dưới), sẽ giữ hai đoạn một lúc. Các trích đoạn sách hiển thị đầu tiên, và danh sách thứ hai của danh sách sách.
Mục tiêu: Tôi muốn đạt được nội dung được mô tả trong tiêu đề: người dùng có thể điều hướng đến đoạn thứ hai trong máy nhắn tin, nhấp vào tiêu đề và sau đó tôi muốn chuyển người dùng trở lại đoạn đầu tiên và nói đoạn đầu tiên để cập nhật văn bản. Đoạn đầu tiên có phương pháp triggerRefresh
cho điều đó.
Mã số: Tôi tin rằng sự cố của tôi xảy ra do cách FragmentPagerAdapter
reuses/tạo Phân đoạn (mà tôi không hiểu). Đây là lớp học của tôi:
static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return new ExcerptsFragment();
case 1:
return new BookListFragment();
default:
throw new IllegalArgumentException("not this many fragments: " + position);
}
}
}
Đây là cách tôi tạo ra các thành viên có liên quan:
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
MyFragmentPagerAdapter mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mFragmentPagerAdapter);
Và đây là những gì tôi đã cố gắng ở những nơi khác trong Hoạt động của tôi, khi tôi nhận được gọi lại từ đầu sách Fragment với tiêu đề được chọn:
mViewPager.setCurrentItem(0); // back to excerpts screen page. It's OK.
// Here's the problem! How to identify the fragment 0
// to ExcerptsFragment and call its triggerRefresh()?!?
loạt các vấn đề:
Gọi bộ chuyển đổi getView()
sẽ không hoạt động vì nó sẽ trả về phiên bản ExcerptsFragment
mới, không phải là phiên bản hiện đang được đính kèm (như dự kiến, ném ngoại lệ).
Tôi đã thấy nhiều người ở đây (example) chỉ lưu trữ các đoạn trong getView()
. Có đúng không? Bởi vì bằng cách nhìn vào các ví dụ chính thức, có vẻ như một mô hình chống lại tôi (đánh bại tham chiếu tự động bằng cách giữ các mục). Và đó cũng là ý kiến here và here (và có vẻ phù hợp với tôi).
Mọi đề xuất? Tôi sẽ không ngạc nhiên nếu tôi không hiểu tất cả những điều này một chút ...
bạn không nên dựa vào khả năng tương thích với cơ chế phân bổ thẻ nội bộ. Xem câu trả lời của tôi cho câu hỏi tương tự như thế nào để làm điều này đúng: http://stackoverflow.com/questions/14035090/how-to-get-existing-fragments-when-using-fragmentpageradapter/41345283#41345283 – morgwai
@morgwai Cảm ơn bạn đã cảnh báo tôi. Tôi đã bao gồm tuyên bố từ chối trách nhiệm để cảnh báo độc giả tiềm năng. – davidcesarino
bạn được chào đón :) Tôi nghĩ tuy nhiên sẽ tốt hơn nếu cung cấp liên kết trực tiếp đến câu trả lời của tôi (không chỉ cho câu hỏi đó) vì câu trả lời của tôi rất mới và do đó vẫn ghi điểm thấp để người đọc có thể bị mắc kẹt với một trong 2 câu trả lời được ghi, cả hai đều có vấn đề. (Tôi đã thêm một số giải thích cho câu trả lời của tôi tại sao giải pháp ghi đè 'instantiateItem' có thể không đủ) – morgwai