使用 SharedPreferences 在 ListView 中保存 ToggleButton 状态
Posted
技术标签:
【中文标题】使用 SharedPreferences 在 ListView 中保存 ToggleButton 状态【英文标题】:Saving ToggleButton state in ListView by using SharedPreferences 【发布时间】:2016-06-09 13:53:02 【问题描述】:我想在下面的代码中通过 SharedPreferences 保存我的 ToggleButton 状态。 请指导我。 非常感谢。
公共类 MyAdapterList 扩展 BaseAdapter 私有上下文上下文; 私人列表文本; public MyAdapterList(上下文上下文,列表文本) this.context = 上下文; this.text = 文本; @覆盖 公共 int getCount() 返回文本大小(); @覆盖 公共对象getItem(int位置) 返回文本.get(位置); @覆盖 public long getItemId(int position) 返回位置; @覆盖 public View getView(final int position, View convertView, ViewGroup parent) LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 查看视图 = inflater.inflate(R.layout.item_view, null, false); TextView tv = (TextView) view.findViewById(R.id.textView); tv.setText(text.get(位置)); 字体 tf = Typeface.createFromAsset(context.getAssets(), "fonts/b_titr.ttf"); tv.setTypeface(tf); tv.setTextColor(Color.parseColor("#003366")); tv.setTypeface(tv.getTypeface(), Typeface.BOLD); final ToggleButton toggleButton = (ToggleButton) view.findViewById(R.id.t_button); final MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(context); toggleButton.setBackgroundResource(R.drawable.favorite_not_selected); toggleButton.setOnClickListener(new View.OnClickListener() @覆盖 公共无效 onClick(查看 v) if (toggleButton.isChecked()) myDatabaseHelper.insert(text.get(position)); toggleButton.setBackgroundResource(R.drawable.favorite_selected); Toast.makeText(context, "已加入收藏列表", Toast.LENGTH_SHORT).show(); 别的 myDatabaseHelper.deletedData(text.get(position)); Toast.makeText(context, "从收藏夹中删除", Toast.LENGTH_SHORT).show(); toggleButton.setBackgroundResource(R.drawable.favorite_not_selected); ); 返回视图;【问题讨论】:
你的意思是你不想对列表中的所有项目都这样做? 兄弟请检查我的回答 您需要将每个值存储在数据库中,您不能使用首选项,因为您将只保存一个值而不是每个项目的所有值 【参考方案1】:static ArrayList<String> toogleValue=new ArrayList<String>();
ToggleButton toggle = (ToggleButton) findViewById(R.id.toggle);
if(toogleValue.contains("id"))
toggle.setChecked(true)
else
toggle.setChecked(false);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
if(isChecked)
toogleValue.add("id")
else
if(toogleValue.contains(id))
toogleValue.remove("id")
);
I hope its help you.
【讨论】:
【参考方案2】:您可以使用以下代码保存切换按钮状态
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
ToggleButton toggle = (ToggleButton) findViewById(R.id.toggle);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
prefs.edit().putBoolean("value", isChecked).commit();
);
让他们回来使用
Boolean value = prefs.getBoolean("value", false);
【讨论】:
告诉我你的结果 但它只会保存一个状态,而不是每个项目的所有状态 K 兄弟,我不明白你的问题。我稍后会发现你【参考方案3】:如果我猜对了
将已检查的项目存储在具有唯一键的某些位置的数据库中(例如;- 如果它是唯一的,则为名称).. 通过构造函数获取已检查的列表,如果存在则检查getview()
,而不是使其检查,否则使其未选中..
您也可以使用共享偏好。这两种技术都需要一个独特的价值。
【讨论】:
【参考方案4】:使用布尔值和 onClick 中的 switch 语句非常容易保存特定状态。
private Boolean toggleBtn1;
private Boolean toggleBtn2;
private Boolean isChecked;
在您的 getView 中:
toggleBtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
isChecked = ((ToggleButton)v).isChecked();
toggleBtn.setTag(position);
String pos = String.valueOf(position);
switch (pos)
case "0" :
if (isChecked)
toggleBtn1 = true;
else
toggleBtn1 = false;
case "1" :
if (isChecked)
toggleBtn2 = true;
else
toggleBtn2 = false;
);
将布尔值保存在 getView 之外。
【讨论】:
以上是关于使用 SharedPreferences 在 ListView 中保存 ToggleButton 状态的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 中使用 SharedPreferences 和 Injectable?