ฉันไม่สามารถอัปเดตเนื้อหาใน ViewPager
การใช้วิธีที่ถูกต้องคืออะไร instantiateItem () และ getItem () ในคลาส FragmentPagerAdapter?
ฉันใช้ getItem () เพื่อยกตัวอย่างและส่งคืนชิ้นส่วนของฉัน:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
มันใช้งานได้ดี ยกเว้นฉันไม่สามารถเปลี่ยนเนื้อหาได้
ดังนั้นฉันจึงพบสิ่งนี้: ViewPager PagerAdapter ไม่อัปเดตมุมมอง
"วิธีการของฉันคือใช้เมธอด setTag () สำหรับมุมมองอินสแตนซ์ใด ๆ ในเมธอด instantiateItem ()"
ตอนนี้ฉันต้องการใช้ instantiateItem () เพื่อทำเช่นนั้น แต่ฉันไม่รู้ว่าฉันต้องส่งคืนอะไร (ชนิดคือ Object) และความสัมพันธ์กับ getItem (ตำแหน่ง int) คืออะไร
ฉันอ่านเอกสารอ้างอิง :
public abstract Fragment getItem (ตำแหน่ง int)
ส่งคืน Fragment ที่เกี่ยวข้องกับตำแหน่งที่ระบุ
วัตถุสาธารณะ instantiateItem (คอนเทนเนอร์ ViewGroup ตำแหน่ง int)
สร้างหน้าสำหรับตำแหน่งที่กำหนด อะแด็ปเตอร์มีหน้าที่รับผิดชอบในการเพิ่มมุมมองลงในคอนเทนเนอร์ที่ให้ไว้ที่นี่แม้ว่าจะต้องตรวจสอบให้แน่ใจว่าสิ่งนี้ทำได้ในเวลาที่ส่งคืนจาก finishUpdate (ViewGroup) พารามิเตอร์
container มุมมองที่มีอยู่ซึ่งจะแสดงหน้านั้น position ตำแหน่งหน้าเว็บที่จะสร้างอินสแตนซ์
ผลตอบแทน
ส่งคืนวัตถุที่เป็นตัวแทนของหน้าใหม่ สิ่งนี้ไม่จำเป็นต้องเป็นมุมมอง แต่สามารถเป็นคอนเทนเนอร์อื่นของหน้า
แต่ฉันก็ยังไม่เข้าใจ
นี่คือรหัสของฉัน ฉันใช้แพ็คเกจสนับสนุน v4
ViewPagerTest
public class ViewPagerTest extends FragmentActivity {
private ViewPager pager;
private MyFragmentAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pager1);
pager = (ViewPager)findViewById(R.id.slider);
String[] data = {"page1", "page2", "page3", "page4", "page5", "page6"};
adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
pager.setAdapter(adapter);
((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
reload();
}
});
}
private void reload() {
String[] data = {"changed1", "changed2", "changed3", "changed4", "changed5", "changed6"};
//adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
adapter.setData(data);
adapter.notifyDataSetChanged();
pager.invalidate();
//pager.setCurrentItem(0);
}
}
MyFragmentAdapter
class MyFragmentAdapter extends FragmentPagerAdapter {
private int slideCount;
private Context context;
private String[] data;
public MyFragmentAdapter(FragmentManager fm, int slideCount, Context context, String[] data) {
super(fm);
this.slideCount = slideCount;
this.context = context;
this.data = data;
}
@Override
public Fragment getItem(int position) {
return new MyFragment(data[position], context);
}
@Override
public int getCount() {
return slideCount;
}
public void setData(String[] data) {
this.data = data;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
MyFragment
public final class MyFragment extends Fragment {
private String text;
public MyFragment(String text, Context context) {
this.text = text;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.slide, null);
((TextView)view.findViewById(R.id.text)).setText(text);
return view;
}
}
นี่คือบางคนที่มีปัญหาที่คล้ายกันไม่มีคำตอบ http://www.mail-archive.com/android-developers@googlegroups.com/msg200477.html