【问题标题】:sharedpreferences stringset value: How to remove in Android Studio.?sharedpreferences 字符串集值:如何在 Android Studio 中删除。?
【发布时间】:2017-07-26 06:45:25
【问题描述】:

我已取消选中复选框(每个项目)以将其删除。我正在使用 HashSet 概念来共享首选项。我想将 arraylist 值从一页传递到另一页。我做什么是我的错误有人帮助我。

我的代码是:

adapterpage.java

public static final String MY_PREFS_NAME = "";


@Override
    public void onClick(View view) {

            boolean isChecked = mainHolder.chekenitem.isChecked();

            // arr=getResources().getStringArray(  mainHolder.txtenimgid.getText().toString());
            //  boolean isChecked = mainHolder.chekenitem.isChecked();
            int i;
            String itemId1 = mainHolder.txtenimgid.getText().toString();
        SharedPreferences prefs=view.getContext().getSharedPreferences(MY_PREFS_NAME,Context.MODE_PRIVATE);
        SharedPreferences.Editor edit=prefs.edit();
        Set<String> set = new HashSet<String>();
        try {
            if (isChecked) {


                addmembers.add(itemId1);

                for (j = 0; j < addmembers.size(); j++) {
                    set.addAll(addmembers);
                   edit.putStringSet("yourKey", set);
                   edit.commit();
                   Toast.makeText(view.getContext(), "Clicked on Checkbox addmembers[pos] : " + addmembers.get(j) + " Item Id is " + itemId1
                           , Toast.LENGTH_LONG).show();

               }

                    //   editor.putString("key_name",itemId );
                    // editor.apply();

              //  }

            } else {
                for(int k=0;k<=addmembers.size();k++){
                    if(addmembers.get(k).equals(itemId1)){
                      //  set.remove(addmembers);
                        addmembers.remove(k);
                        edit.remove(addmembers.get(k));
                        edit.commit();

                        break;
                    }


                }

【问题讨论】:

  • edit.remove("yourKey");edit.commit();
  • 当你想删除 sharedpreferences 值时输入相同的键名
  • 我更改了上面的代码,我有 3 个数组列表,但我取消选中第 2 个值,返回值为 null

标签: java android arraylist fragment sharedpreferences


【解决方案1】:

你在这里犯错了......

 for (j = 0; j < addmembers.size(); j++) {
//set.addAll(addmembers);this will add every time whole data of list into set
    set.add(addmembers.get(j));
                   edit.putStringSet("yourKey", set);
                   edit.commit();
                   Toast.makeText(view.getContext(), "Clicked on Checkbox addmembers[pos] : " + addmembers.get(j) + " Item Id is " + itemId1
                           , Toast.LENGTH_LONG).show();

               }

在删除对此的更改时也在此处... edit.remove("yourKey");

【讨论】:

  • 我删除并更改了上面的代码,但删除了所有值我只想删除特定项目值。
  • 那么你为什么在这里使用 SET 试试这个... for (j = 0; j
  • 我在另一个页面中使用 Set 方法绑定并获取数组值,例如 ,Set set = prefs.getStringSet("yourKey", null); ArrayList addapterarraylist = new ArrayList(set); for (String temp: addapterarraylist) { System.out.println(temp); Toast.makeText(getActivity(),temp,Toast.LENGTH_SHORT).show(); }
【解决方案2】:

试试这个代码:

public static final String MY_PREFS_NAME = "";
@Override
public void onClick(View view) {

        boolean isChecked = mainHolder.chekenitem.isChecked();

        // arr=getResources().getStringArray(  mainHolder.txtenimgid.getText().toString());
        //  boolean isChecked = mainHolder.chekenitem.isChecked();
        int i;
        String itemId1 = mainHolder.txtenimgid.getText().toString();
    SharedPreferences prefs=view.getContext().getSharedPreferences(MY_PREFS_NAME,Context.MODE_PRIVATE);
    SharedPreferences.Editor edit=prefs.edit();
    Set<String> set = new HashSet<String>();
    try {
        if (isChecked) {


            addmembers.add(itemId1);

            for (j = 0; j < addmembers.size(); j++) {
                set.addAll(addmembers);
               edit.putStringSet("yourKey", set);
               edit.commit();
               Toast.makeText(view.getContext(), "Clicked on Checkbox addmembers[pos] : " + addmembers.get(j) + " Item Id is " + itemId1
                       , Toast.LENGTH_LONG).show();

           }

        } else {
            for(int k=0;k<=addmembers.size();k++){
                if(addmembers.get(k).equals(itemId1)){
                    edit.remove("yourKey");
                    edit.commit();
                }


            }

您所要做的是,只要检查项目,您只需清除共享Beft值即可。希望对你有帮助

【讨论】:

    【解决方案3】:

    感谢大家,我的代码中的解决方案运行良好。

            String itemId1 = mainHolder.txtenimgid.getText().toString();
            SharedPreferences prefs=view.getContext().getSharedPreferences(MY_PREFS_NAME,Context.MODE_PRIVATE);
            SharedPreferences.Editor edit=prefs.edit();
            Set<String> set = new HashSet<String>();
            try {
                restart:
                if (isChecked) {
                    addmembers.add(itemId1);
                    for (j = 0; j < addmembers.size(); j++) {
                        set.addAll(addmembers);
                       edit.putStringSet("yourKey", set);
                       edit.commit();
                       Toast.makeText(view.getContext(), "Clicked on Checkbox addmembers[pos] : " + addmembers.get(j) + " Item Id is " + itemId1
                               , Toast.LENGTH_LONG).show();
    
                   }
    
                } else {
    
                    //editor.remove("username").commit();
                    for(int k=0;k<=addmembers.size();k++){
                        if(addmembers.get(k).equals(itemId1)){
                            addmembers.remove(k);
                            edit.remove("yourKey");
                            set.addAll(addmembers);
                            edit.putStringSet("yourKey", set);
                           edit.commit();
                          break restart;
                        }
    
    
                    }
    
                }
            }
            catch (Exception ex){
                ex.toString();
            }
    

    代码对我来说运行良好。

    【讨论】:

      猜你喜欢
      • 2016-09-26
      • 2016-12-03
      • 1970-01-01
      • 2014-03-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多