使用SharedPreferences在ListView中保存ToggleButton状态

4
我想通过SharedPreferences来保存以下代码中ToggleButton的状态。请指导我。 非常感谢。
public class MyAdapterList extends BaseAdapter {
private Context context; private List text;
public MyAdapterList(Context context, List text) { this.context = context; this.text = text; }
@Override public int getCount() { return text.size(); }
@Override public Object getItem(int position) { return text.get(position); }
@Override public long getItemId(int position) { return position; }
@Override public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.item_view, null, false); TextView tv = (TextView) view.findViewById(R.id.textView); tv.setText(text.get(position)); Typeface 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() { @Override public void onClick(View v) { if (toggleButton.isChecked()) { myDatabaseHelper.insert(text.get(position)); toggleButton.setBackgroundResource(R.drawable.favorite_selected); Toast.makeText(context, "已添加到收藏夹列表", Toast.LENGTH_SHORT).show(); } else { myDatabaseHelper.deletedData(text.get(position)); Toast.makeText(context, "已从收藏夹删除", Toast.LENGTH_SHORT).show(); toggleButton.setBackgroundResource(R.drawable.favorite_not_selected); } } });
return view; } }

你的意思是要对列表中的所有项目都这样做吗? - Chol
兄弟,请检查一下我的答案。 - saeed
你需要将每个值存储在数据库中,不能使用首选项,因为这样只会保存一个值,而不是每个项目的所有值。 - Chol
4个回答

2
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);

请告诉我你的结果。 - saeed
但它只会保存一个状态,而不是每个项目的所有状态。 - Chol
兄弟,我理解你的问题,稍后我会联系你。 - saeed

0
如果我理解正确的话,将选中的项目存储在数据库或其他某个地方,并使用唯一键(例如名称)进行标识。通过构造函数获取选中列表,在getview()中检查是否存在,如果存在则将其标记为选中,否则将其标记为未选中。您也可以使用共享首选项。这两种技术都需要一个唯一值。

0

使用布尔值和在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之外。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接