【发布时间】:2017-04-22 20:20:06
【问题描述】:
我有一个切换按钮(在所有页面中),允许用户喜欢页面(viewpager)的内容。
当用户不喜欢某个页面时,该页面将从 viewpager 中删除。
下面是循环
用户“不喜欢” -> 更新 SQLite -> NotifyDatasetChanged() -> 片段 重建 -> Viewpager 显示
问题是假设我在位置 2 并且我“不喜欢” - 页面被删除 - 在其位置放置一个新页面,其切换按钮状态与已删除页面相同,而我希望切换按钮状态根据光标返回的实际值设置。
即使 ToggleButton 的“isChecked()”状态为“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);
}
});
}
【问题讨论】:
-
分享您的代码。适配器和填充部分。
-
@azizbekian 我已经更新了
-
什么是
item_status,它在哪里被初始化? -
item_status 来自 database/cursor - CursorPagerAdapter 的一部分 - 通过 Argument Bundle 级联到“Population/ItemDetailFragment”
标签: android android-viewpager togglebutton