我有一个切换按钮(在所有页面中),以允许用户喜欢页面(viewpager)的内容。
当用户不喜欢页面时,该页面将从viewpager中删除。
以下是周期
用户“不喜欢” - >更新SQLite - > NotifyDatasetChanged() - >片段 重建 - > Viewpager显示
问题是假设我在第2位且我“不像” - 页面被删除 - 在其位置放置一个新页面,其切换按钮状态与删除页面相同,而我期望togglebutton状态根据Cursor返回的实际值进行设置。
即使“isChecked()”ToggleButton的状态为“true”并且作为rootview的一部分在getItem()中返回 - 并且还在我创建的模拟TextView中显示 - 不知何故“已检查”状态从删除的页面中保留。
适配器
public class CursorPagerAdapter extends FragmentStatePagerAdapter {
.
.
public Fragment getItem(int position) {
Fragment fragment = null;
if (mCursor.moveToPosition(position)) {
Bundle arguments = new Bundle();
fragment = new myDetailFragment();
fragment.setArguments(arguments);
}
return fragment;
}
}
人口
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ToggleButton addFav = (ToggleButton) rootView.findViewById(R.id.addFavorite);
.
.
if (item_status.equals("0")) {
addFav.setChecked(false);
afw.setBackgroundColor(Color.GRAY);
} else (item_status.equals("1")) {
addFav.setChecked(true);
afw.setBackgroundColor(Color.RED);
}
.
.
addFav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Context ctx = getActivity();
ContentValues values = new ContentValues(1);
SharedPreferences prefs = getActivity().getSharedPreferences("com.dap.qgit", Context.MODE_PRIVATE);
ToggleButton tb = (ToggleButton) v;
if (tb.isChecked()) {
values.put(DataProvider.COL_ITEM_STATUS, "1");
} else {
values.put(DataProvider.COL_ITEM_STATUS, "0");
}
String[] args = new String[1];
args[0] = "" + tb.getTag();
ctx.getContentResolver().update(DataProvider.CONTENT_URI_ITEM, values, "item_id=?", args);
getContext().getContentResolver().notifyChange(DataProvider.CONTENT_URI_TAG_ITEMS,null);
}
});
}
答案 0 :(得分:1)
将FragmentStatePagerAdapter
实施与Cursor
等动态数据集一起使用时,需要考虑以下几点。
FragmentStatePagerAdapter
从支持库映射其实例化的片段到他们的对应的位置,而不是他们相应的ID FragmentStatePagerAdapter
不支持动态更改数据集,正如您getItemPosition(Object object)
的实施所见,它始终返回POSITION_UNCHANGED
FragmentStatePagerAdapter
的实施,其中映射其实例化的片段来自{/ 1}对应的 ID 并且还能够通过他们相应的ID 恢复那些片段的状态
Cursor
中相关数据的位置返回片段的正确位置
Cursor
方法。现在,您可以从支持库实现/ port getItemPosition(Object object)
,因此这样的实现提供了id,映射和正确的位置解析功能,或者您可以使用一些已经为您提供此类功能的库,例如{提供第一个功能的{3}}库和第二个功能可以通过this GitHub Gist 简单实现。
答案 1 :(得分:0)
首先请阅读“Martin Albedinsky”的回复 - 感谢他帮我解决问题。
我在布局XML中使用了以下内容来规避问题:
<ToggleButton
.
.
.
android:saveEnabled="false"
.
.
.
>
虽然我没有亲自尝试过马丁的解决方案 - 他的解释似乎是一种更清洁的方法。
我还没有确定这个对我有用的解决方案是否会导致任何性能/不良问题。