如何限制ListView中选中的复选框?

时间:2017-08-04 15:42:42

标签: java android listview checkbox

我试图将列表视图上的所选复选框限制为仅3个选定项目,如果所选框已经是3,我想禁用其他列表上的任何点击。如何做?

我一直试图根据非常相似问题的答案来解决它。但它仍然没有奏效。所有代码都会成为
的错误     无法解析方法" setOnItemSelectedListener"

这是我到目前为止所做的 second.java 类的代码。

package com.example.imah.uid;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ListView;
import android.widget.Toast;

public class second extends AppCompatActivity {

    ListView listview ;
    String[] pStyle = new String[] {
            "Fashion",
            "HDR",
            "Hi Speed",
            "Landscape",
            "Portrait",
            "Street",
            "Wedding"

    };

    SparseBooleanArray sparseBooleanArray ;
    private int numberOfCheckboxesChecked;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        listview = (ListView)findViewById(R.id.listView2);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (second.this,
                        android.R.layout.simple_list_item_multiple_choice,
                        android.R.id.text1, pStyle );

        listview.setAdapter(adapter);

        listview.setOnItemSelectedListener(new onItemSelectedListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked && numberOfCheckboxesChecked >= 4) {
                    checkbox1.setChecked(false);
                } else {

                    if (isChecked) {
                        numberOfCheckboxesChecked++;
                    } else {
                        numberOfCheckboxesChecked--;
                    }
                }
            }
        });

    }
}

3 个答案:

答案 0 :(得分:2)

我正在处理一个项目并遇到了这个问题,但我在第一个答案中遇到的是,如果您达到最大数量的复选框,然后选择任何其他复选框 2 或 3 次,它会让您选择它。我不知道为什么会发生这种情况,但后来我知道 listView 它自己已经检查了方法并且可以正常工作,没有任何错误。

设置多选布局,或者你也可以设置自定义的checkedListView布局。

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_multiple_choice, SODA);
ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String selected = (String) ListView.getItemAtPosition(position);
                if (arrayList.contains(selected)) {
                    arrayList.remove(selected);
            
                    ListView.setItemChecked(position, false);
                } else if (arrayList.size() < MAX_SELECTABLE) {
                    arrayList.add(selected);
                    ListView.setItemChecked(position, true);
                } else {
                    Toast.makeText(UserSelectionActivity.this, "You can\'t select more than " + MAX_SELECTABLE + " items", Toast.LENGTH_SHORT).show();
                    ListView.setItemChecked(position, false);
                }
            }
        });

答案 1 :(得分:0)

试试这个:

public class Second extends AppCompatActivity {

    ListView listview;
    String[] pStyle = new String[]{
            "Fashion",
            "HDR",
            "Hi Speed",
            "Landscape",
            "Portrait",
            "Street",
            "Wedding"

    };
    private static final int MAX_SELECTABLE = 3;
    List<String> mSelected = new ArrayList<>();

    SparseBooleanArray sparseBooleanArray;
    private int numberOfCheckboxesChecked;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        listview = (ListView) findViewById(R.id.listView2);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this,
                        android.R.layout.simple_list_item_multiple_choice,
                        android.R.id.text1, pStyle);

        listview.setAdapter(adapter);

        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
                CheckedTextView ctv = (CheckedTextView) view;
                if (ctv.isChecked()) {
                    mSelected.remove(pStyle[pos]);
                    ctv.setChecked(false);
                } else if (mSelected.size() < MAX_SELECTABLE) {
                    mSelected.add(pStyle[pos]);
                    ctv.setChecked(true);
                } else {
                    Toast.makeText(Second.this, "You can\'t select more than " + MAX_SELECTABLE + " items", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

答案 2 :(得分:-1)

以这种方式使用:

        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (second.this,
                        android.R.layout.simple_list_item_multiple_choice,
                        android.R.id.text1, pStyle );

        listview.setAdapter(adapter);

        listview.setOnItemSelectedListener(new onItemSelectedListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                    if (isChecked) {
if(numberOfCheckboxesChecked=>4){
checkbox1.setChecked(false);
}
else{
numberOfCheckboxesChecked++;
}


                    } else {
                        numberOfCheckboxesChecked--;
                    }
                }
            }
        });

    }
}