java - 如何限制ListView中的复选框被选中?

标签 java android listview checkbox

我试图将 ListView 上的选定复选框限制为仅 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--;
                    }
                }
            }
        });

    }
}

最佳答案

我正在开发一个项目,并遇到了这个问题,但我在第一个答案中遇到的是,如果您达到复选框的最大数量,然后选择任何其他复选框 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);
                }
            }
        });

关于java - 如何限制ListView中的复选框被选中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45510824/

相关文章:

java - JSP - 重定向同时保留请求属性

java - android 网络服务 mysql

java - 如何将可绘制图像放入 gridview 中?

android - ListView末尾的三个点

java - 使用 Picasso Library 目标不能为空

java - Jetty WebSockets 的 Jar/Class 问题

java - 微调器,如果再次选择项目

java - 在 Clojure REPL 中使用自定义 Java 类

android - 在 Android 中安排任务

listview - Xamarin.Forms - ListView 未在 OnAppearing 方法中更新