我试图将 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/