使用 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 状态的主要内容,如果未能解决你的问题,请参考以下文章

Android SharedPreferences

如何使用SharedPreferences? [重复]

Android-SharedPreferences

如何在 Flutter 中使用 SharedPreferences 和 Injectable?

使用 SharedPreferences 在 ListView 中保存 ToggleButton 状态

如何在颤振中使用 SharedPreferences?