我一直在努力解决这个问题,但是找不到解决方案。目前,我使用RecyclerView
在设备上安装了所有已安装的应用PackageManager
。这很有效,这是我得到的结果:
我遇到的问题是我无法弄清楚如何存储/检索所选的复选框,让我详细说明。
当我选择Checkbox
时,我会在onBindViewHolder
内执行以下操作:
holder.mAppSelect.setOnCheckedChangeListener(null);
holder.mAppSelect.setChecked(mDataSet.get(position).isSelected());
holder.mAppSelect.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mDataSet.get(position).setSelected(isChecked);
if (holder.mAppSelect.isChecked()){
//Ok great, I can use this to get the position, package name and app name that was selected/checked
}else{
//and it was un-sellected
}
因此,我可以使用上面的内容来存储所选复选框的包名称,并在boolean
中存储checkbox
状态的SQLite
,如下所示:
holder.mAppSelect.setOnCheckedChangeListener(null);
holder.mAppSelect.setChecked(mDataSet.get(position).isSelected());
holder.mAppSelect.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mDataSet.get(position).setSelected(isChecked);
if (holder.mAppSelect.isChecked()){
dbManager.insert(holder.mTextViewPackage.getText().toString(), true);
}else{
dbManager.insert(holder.mTextViewPackage.getText().toString(), false);
}
这是我遇到困难的地方..让我说我关闭Activity
并再次打开它,我想获取从SQLite
中选择的包/复选框并重新设置。< / p>
所以,我正在寻找一种方法来“循环”每个持有者,从持有者那里获取包名,以便我可以检查SQLite
是否先前选中了复选框并相应地设置它。 / p>
我认为值得一提的是,自上次启动应用程序以来,应用程序可能已被卸载或安装。这意味着getAdapterPosition
将不会保持不变。
编辑1:
这就是我填充名为Array
的{{1}}:
mDataSet
答案 0 :(得分:1)
您可以做的是使用共享偏好
当您从共享偏好开始活动回溯状态时,如此
SharedPreferences sharedPreference PreferenceManager.getDefaultSharedPreferences(getAppContext());
for(i=0;i<mDataSet.size();i++)
{
mDataSet.get(i).setSelected(sharedPreference.getBoolean(mDataSet.get(i).getAppPackage(),false));
}
并在你的适配器中保存这样的状态。
holder.mAppSelect.setOnCheckedChangeListener(null);
holder.mAppSelect.setChecked(mDataSet.get(position).isSelected());
holder.mAppSelect.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mDataSet.get(position).setSelected(isChecked);
sharedPreference.edit().putBoolean(mDataSet.get(position).getAppPackage(), isChecked).commit();
});
答案 1 :(得分:0)
正如我所看到的,如果isSelected()返回true,则按照正确的步骤显示选中的复选框,并保存SQLite
中复选框的状态(选中/未确认)。
要在关闭并再次打开SQLite
时显示Activity
复选框的已保存状态,您只需执行以下操作:
首先,您需要获取已安装软件包的最新列表。
从包含名称匹配的SQLite
中选择数据/复选框值
最新的包裹清单。
现在,由于您已从SQLite中保存了复选框值,因此请创建数据集
使用最新安装的应用列表和您的复选框值
来自SQLite
。
将其传递给您的RecyclerViewAdeptor
。
它应该可以正常工作。
答案 2 :(得分:0)
您可以尝试 OnClickListener 而不是 OnCheckedChangeListener
试试这个方法,
1.使用包含所选项目的列表。 //selectedlist
如果您想永久存储它,请使用 SharedPref 。
2.选择项目的唯一//appname as string
3.根据所选列表项设置检查状态。
if(selectedlist.get(appname)!=null
&& (selectedlist.get(appname).equals("selected"))) {
holder.checkBox.setChecked(true);
}
else {
holder.checkBox.setChecked(false);
}
4。将监听器添加到您的复选框
View.OnClickListener listener=new View.OnClickListener() {
@Override
public void onClick(View v) {
if (selectedlist.get(appname)==null) {
selectedlist.put(appname, "selected");
else if (selectedlist.get(appname).equals("selected"))
selectedlist.put(appname, "not selected");
else
selectedlist.put(appname, "selected");
notifyDataSetChanged();
}
};
holder.checkBox.setOnClickListener(listener);