在ListView的多节模式设置的限制 [英] Set Limit on ListView multiple section mode

查看:150
本文介绍了在ListView的多节模式设置的限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有定义叫名字定义字符串的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆