我无法更新ViewPager中的内容.
一个问题:FragmentPagerAdapter类中的方法instantiateItem()和getItem()的关系和正确用法是什么?
我只使用getItem()实例化并返回我的片段:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Run Code Online (Sandbox Code Playgroud)
这很好用(但据说我不能改变内容).
所以我发现了这个:ViewPager PagerAdapter没有更新View
特别是在其中讨论了方法instantiateItem():
"我的方法是对instantiateItem()方法中的任何实例化视图使用setTag()方法"
所以现在我想实现instantiateItem()才能做到这一点.但我不知道我必须返回那里(return是Object)和getItem(int position)的关系是什么?
目前我正在使用getItem来实例化Fragment,这是错的吗?但是,我是否必须将片段放在实例变量中,或者根本不实现getItem()......?我只是不明白.
我试过阅读参考资料:
public abstract Fragment getItem(int position)
返回与指定位置关联的片段.
public Object instantiateItem(ViewGroup容器,int位置)
创建给定位置的页面.适配器负责将视图添加到此处给出的容器,但它必须确保在从finishUpdate(ViewGroup)返回时完成此操作.参数
容器包含将在其中显示页面的View.position要实例化的页面位置.
返回
返回表示新页面的Object.这不需要是View,但可以是页面的其他容器.
......但我仍然不明白它们是如何相关的以及我必须做些什么.
这是我的代码.我正在使用支持包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, …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,它有两个选项卡,一个是Reminder,另一个是Completed Task.
单击切换按钮时,我希望将列表移动到已完成的任务.
这个想法是:
但是当我点击切换按钮并滑动到已完成时,它仍然是空的.退出应用程序后,然后滑动到选项卡,只显示数据.
如何滑动而不是退出应用并再次重新打开时,如何立即将数据显示在"已完成"选项卡中?谢谢
AllAdapter(提醒)
holder.toggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((ToggleButton)v).isChecked()) {
int getPosition = (Integer) v.getTag(); // Here we get the position that we have set for the checkbox using setTag.
search.get(getPosition).setSelected(((ToggleButton) v).isChecked());
int id= search.get(getPosition).getID();
mdb = new MyDatabaseHelper(v.getContext());
database = mdb.getReadableDatabase();
Cursor cursor = database.rawQuery("SELECT * FROM " + MyDatabaseHelper.TABLE__TASK + " WHERE ID = ? ", new String[]{id+""}, null);
if (cursor != null && …Run Code Online (Sandbox Code Playgroud)