【问题标题】:Saving ToggleButton state in ListView by using SharedPreferences使用 SharedPreferences 在 ListView 中保存 ToggleButton 状态
【发布时间】: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); } } }); 返回视图; } }

【问题讨论】:

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

标签: android listview sharedpreferences baseadapter togglebutton


【解决方案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 之外。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-29
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        • 2018-09-24
        相关资源
        最近更新 更多