我试图将列表视图上的所选复选框限制为仅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--;
}
}
}
});
}
}
答案 0 :(得分:2)
我正在处理一个项目并遇到了这个问题,但我在第一个答案中遇到的是,如果您达到最大数量的复选框,然后选择任何其他复选框 2 或 3 次,它会让您选择它。我不知道为什么会发生这种情况,但后来我知道 listView 它自己已经检查了方法并且可以正常工作,没有任何错误。
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--;
}
}
}
});
}
}