在ListView的多节模式设置的限制 [英] Set Limit on ListView multiple section mode
问题描述
我有定义叫名字定义字符串的ArrayList,我添加到我的ListView对象如下:
我创建两个数组适配器和ListView对象数组适配器以及多种选择模式。这个伟大的工程,我可以滚动和选择多个对象。但问题是,我想向用户强行进入能够选择从ListView中只有4项。如何设置一个限制?
适配器=新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_multiple_choice,姓名);
nameList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
nameList.setAdapter(适配器);
试试这个:
公共类AccountListAdapter延伸BaseAdapter {@燮pressWarnings(未使用)
私人最终静态字符串变量= AccountListAdapter.class.getSimpleName();私人上下文的背景下;
私人列表<&帐户GT; rowItems;私人INT selectedItemCounter = 0;私人最终诠释限制;公共AccountListAdapter(上下文的背景下,列表与LT;帐户>的项目,INT限制){
this.context =背景;
this.rowItems =物品;
this.limit =限制;
}公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){ LayoutInflater mInflater =(LayoutInflater)上下文
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 决算rowItem =(账户)的getItem(位置); convertView = mInflater.inflate(R.layout.account_selection_item,NULL); TextView的电视=(TextView中)convertView.findViewById(R.id.textView);
切换按钮TB =(切换按钮)convertView
.findViewById(R.id.toggleButton); tb.setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){ @覆盖
公共无效onCheckedChanged(CompoundButton buttonView,
布尔器isChecked){ 如果(器isChecked&放大器;&放大器;!rowItem.isSelected()){ 如果(selectedItemCounter> =极限){
Toast.makeText(背景下,
不能更+ selectedItemCounter,
Toast.LENGTH_SHORT).show();
buttonView.setChecked(假);
返回;
} rowItem.setSelected(真);
selectedItemCounter ++;
}否则如果(器isChecked&放大器;!&放大器; rowItem.isSelected()){
rowItem.setSelected(假);
selectedItemCounter--;
} }
}); tv.setText(rowItem.getDevId());
tb.setChecked(rowItem.isSelected()); 返回convertView;
}@覆盖
公众诠释的getCount(){
返回rowItems.size();
}@覆盖
公共对象的getItem(INT位置){
返回rowItems.get(位置);
}@覆盖
众长getItemId(INT位置){
返回rowItems.indexOf(的getItem(位置));
}
}
努力提高我的code。与ViewHolder模式,但失败了。
如果任何人有更好的主意,请让我知道。
I have an ArrayList of Strings defined called names defined and I add to my ListView object as follows:
I create an Array Adapter and set multiple choice mode in both the Array Adapter and ListView object. This works great, I can scroll and pick multiple objects. But the problem is I want to force the user into being able to pick only 4 items from the ListView. How can I set a restriction?
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,names);
nameList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
nameList.setAdapter(adapter);
Try this:
public class AccountListAdapter extends BaseAdapter {
@SuppressWarnings("unused")
private final static String TAG = AccountListAdapter.class.getSimpleName();
private Context context;
private List<Account> rowItems;
private int selectedItemCounter = 0;
private final int limit;
public AccountListAdapter(Context context, List<Account> items, int limit) {
this.context = context;
this.rowItems = items;
this.limit = limit;
}
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
final Account rowItem = (Account) getItem(position);
convertView = mInflater.inflate(R.layout.account_selection_item, null);
TextView tv = (TextView) convertView.findViewById(R.id.textView);
ToggleButton tb = (ToggleButton) convertView
.findViewById(R.id.toggleButton);
tb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked && !rowItem.isSelected()) {
if (selectedItemCounter >= limit) {
Toast.makeText(context,
"can't be more" + selectedItemCounter,
Toast.LENGTH_SHORT).show();
buttonView.setChecked(false);
return;
}
rowItem.setSelected(true);
selectedItemCounter++;
} else if (!isChecked && rowItem.isSelected()) {
rowItem.setSelected(false);
selectedItemCounter--;
}
}
});
tv.setText(rowItem.getDevId());
tb.setChecked(rowItem.isSelected());
return convertView;
}
@Override
public int getCount() {
return rowItems.size();
}
@Override
public Object getItem(int position) {
return rowItems.get(position);
}
@Override
public long getItemId(int position) {
return rowItems.indexOf(getItem(position));
}
}
tried to improve my code with ViewHolder pattern but failed. if anyone have better idea, please let me know.
这篇关于在ListView的多节模式设置的限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!