【问题标题】:how to save all check boxes values in arraylist or shareprefrence如何将所有复选框值保存在 arraylist 或 sharedpreferences 中
【发布时间】:2018-08-24 01:08:42
【问题描述】:

我做了四个复选框。当我检查它们是否正确时,它应该保存在ArrayList 中。我可以将它们保存到array list 吗?而且当我取消选择它们时,它们应该是listArrayList中的removed。我已经实现了checkboxes,还有一个全选按钮来全选checkboxes和一个deselect取消全选按钮checkboxes 的值应该从中删除。


我的代码是

public class SearchFragment extends BaseFragment {
private static final String TAG = null;
String[] name={ "Chicago", "Los Angeles", "Japan", "Europe"};
Object arr;
ArrayList<String> arrayList = new ArrayList<>();
TextView tv2
CheckBox abc,abc1,a,b,c;
public static SearchFragment newInstance () {
    return new SearchFragment();
}

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
                          Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_search, container, false);
    tv2=(TextView) view.findViewById(R.id.tv2);


    abc=(CheckBox) view.findViewById(R.id.abc);
    a=(CheckBox) view.findViewById(R.id.a);
    b=(CheckBox) view.findViewById(R.id.b);
    c=(CheckBox) view.findViewById(R.id.c);

    return view;
}

@Override
public void onViewCreated (View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ButterKnife.bind(this, view);


    tv2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String value=tv2.getText().toString().trim();
            if (value.equals("Select all")){
                abc.setChecked(true);
                a.setChecked(true);
                b.setChecked(true);
                c.setChecked(true);
                tv2.setText("UnSelect all");
                arrayList.addAll(Arrays.asList(name));
                Log.e("SELECTED","SELECTED "+arrayList.size());
            }
            else {
                abc.setChecked(false);
                b.setChecked(false);
                a.setChecked(false);
                c.setChecked(false);

                tv2.setText("Select all");
                if (arrayList.size() != 0) {
                    arrayList.clear();

                }
                Log.e("NOT_SELECTED","NOT_SELECTED");
            }
       }
    });
    abc.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                arrayList.addAll(Arrays.asList("Chicago"));
            }

        }
    });

【问题讨论】:

  • 您能发布完整的活动代码
  • 我无法将代码放在这里。
  • public class SearchFragment extends BaseFragment { String[] name={ "Chicago", "Los Angeles", "Japan", "Europe"};文本视图 tv2;复选框 abc,a,b,c;公共静态 SearchFragment newInstance () { return new SearchFragment(); }
  • @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_search, container, false); tv2=(TextView) view.findViewById(R.id.tv2); abc=(CheckBox) view.findViewById(R.id.abc); a=(复选框) view.findViewById(R.id.a); b=(复选框) view.findViewById(R.id.b); c=(复选框) view.findViewById(R.id.c);返回视图; }
  • 编辑你的问题并把你所有的代码@Shabnam

标签: android arrays arraylist checkbox


【解决方案1】:

使用以下代码将您的所有checkBox 数据添加到ArrayList

ArrayList<String> arrayList = new ArrayList<>();  

tv2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String value=tv2.getText().toString().trim();
        if (value.equals("Select all")){
            abc.setChecked(true);
            a.setChecked(true);
            b.setChecked(true);
            c.setChecked(true);
            tv2.setText("Select all");


           //Adding data to ArrayList
           List arrList = Arrays.asList(name);
           arrayList.addAll(arrList);
           arrayList.addAll(Arrays.asList(arr));

           //or, Add data into ArrayList Manually
           arrayList.add("Chicago");
           arrayList.add("Los Angeles");
           arrayList.add("Japan");
           arrayList.add("Europe");

        }
        else {
            abc.setChecked(false);
            b.setChecked(false);
            a.setChecked(false);
            c.setChecked(false);

            tv2.setText("Select all");

            //Clear Data from ArrayList
            if(arrayList.size()!=0){
                 arrayList.clear
             }
        }

   }
});

使用下面的代码选择和删除:

tv2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String value=tv2.getText().toString().trim();
        if (value.equals("Select all")){
            abc.setChecked(true);
            a.setChecked(true);
            b.setChecked(true);
            c.setChecked(true);
            tv2.setText("Remove all");
            arrayList.addAll(Arrays.asList(name));
            Log.e("SELECTED","SELECTED "+arrayList.size());
        }
        else {
            abc.setChecked(false);
            b.setChecked(false);
            a.setChecked(false);
            c.setChecked(false);

            tv2.setText("Select all");
            if (arrayList.size() != 0) {
                arrayList.clear();
            }
           Log.e("NOT_SELECTED","NOT_SELECTED");
        }
   }
});

添加单个项目如下:

参考:

代码在这里:

abc.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {
            //is chkIos checked?
    if (((CheckBox) v).isChecked()) {
                    arrayList.add("Chicago");
    }
    else 
      // removes Chicago by arrayList Position
      //to avoid runtime exception
                    if(arrayList.contain("Chicago")){
                    arrayList.remove(0);
                    }else{
                   // do your stuff
                      }

  }
});

【讨论】:

  • 我在 arrayList.clear 上出现空指针异常崩溃。 java.lang.NullPointerException:尝试在 com.sodick.view.fragments.SearchFragment$1.onClick(SearchFragment.java:96) 的空对象引用上调用虚拟方法“void java.util.ArrayList.clear()”跨度>
  • 当 ArrayList 上没有数据并且想要清除 arrayList 时,它会显示 NullPointException。我现在检查了编辑我的答案。
  • 似乎正确放置日志并检查数据,ArrayList 是否正在获取您的数组的数据。@Shabnam
  • 我没有在日志中获取数据。可以帮我解决这个问题。
  • 对不起,我忘记创建 ArryList 对象,我编辑了我的答案,请检查并回复。
【解决方案2】:

您正在尝试访问 arrayList 而不对其进行初始化。使用下面的代码

public class SearchFragment extends BaseFragment {
String[] name={ "Chicago", "Los Angeles", "Japan", "Europe"};
Object arr;
ArrayList<String> arrayList = new ArrayList<>();
TextView tv2,tv3,tv4,tv5,tv6,tv7;
CheckBox 
abc,abc1,a,b,c,abc2,abc3,abc4,a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4;
public static SearchFragment newInstance () {
    return new SearchFragment();
}

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup 
 container,
                      Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_search, container, 
false);
tv2=(TextView) view.findViewById(R.id.tv2);


abc=(CheckBox) view.findViewById(R.id.abc);
a=(CheckBox) view.findViewById(R.id.a);
b=(CheckBox) view.findViewById(R.id.b);
c=(CheckBox) view.findViewById(R.id.c);

return view;
}

@Override
public void onViewCreated (View view, @Nullable Bundle 
savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

ButterKnife.bind(this, view);


tv2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String value=tv2.getText().toString().trim();
        if (value.equals("Select all")){
            abc.setChecked(true);
            a.setChecked(true);
            b.setChecked(true);
            c.setChecked(true);
            tv2.setText("Clear All");

            arrayList.addAll(Arrays.asList(name));



        }
        else {
            abc.setChecked(false);
            b.setChecked(false);
            a.setChecked(false);
            c.setChecked(false);

            tv2.setText("Select all");
            arrayList.clear();
        }
   }
});
}}

【讨论】:

  • 是的,它正在工作,但是当我点击取消选择时,它仍然显示复选框没有发生任何事情
  • @Shabnam deselect/Click的功能在哪里?
  • 当 1 次点击 tv2 时,所有复选框将被选中 当 2 次点击 tv2 时,所有复选框将被取消选中
猜你喜欢
  • 2018-08-30
  • 2023-03-09
  • 2019-06-08
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多