Android layout 选举产生的问题

Android layout 选举产生的问题,android-layout,Android Layout,我用一组行创建了listview。每行都有一个复选框。如果我点击一个复选框,另一个复选框也会被选中。我将如何避免这种情况?任何人都知道帮助我。这是因为如果(view==null)删除此项,您将按条件循环视图。为了避免列表视图中的复选框出现问题,您可以在开始时将布尔数组初始化为false,然后在列表视图中选中复选框的数组中的相应位置设置为true。当您在应用程序中前后移动或滚动ListView时,这不会导致复选框处于选中状态时出现问题 以下是如何将checkboxstate设置为布尔数组: ho

我用一组行创建了listview。每行都有一个复选框。如果我点击一个复选框,另一个复选框也会被选中。我将如何避免这种情况?任何人都知道帮助我。

这是因为如果(view==null)删除此项,您将按条件循环视图。

为了避免列表视图中的复选框出现问题,您可以在开始时将布尔数组初始化为false,然后在列表视图中选中复选框的数组中的相应位置设置为true。当您在应用程序中前后移动或滚动ListView时,这不会导致复选框处于选中状态时出现问题

以下是如何将checkboxstate设置为布尔数组:

 holder.checkbox.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        if (((CheckBox) v).isChecked())
                            checkBoxState[pos] = true;
                        else
                            checkBoxState[pos] = false;

                    }
                });
然后,当您滚动时,这将保持复选框处于选中状态,并且状态不会自动更改:

holder.checkbox.setChecked(checkBoxState[pos]);
这是我的代码:

 public class Favourites extends Activity {
        ListView list;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.listfavourites);
            initcomponents();

            list.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {  
                }
            });
            ArrayList<HashMap<String, String>> alist = new ArrayList<HashMap<String, String>>();

            for (int i = 1; i < 20; i++) {
                HashMap<String, String> hmap = new HashMap<String, String>();
                hmap.put("itemname", "ItemName" + i);
                hmap.put("price", "Price");
                alist.add(hmap);

            }

            final CustomListAdapter adapter = new CustomListAdapter(this,
                    R.layout.listitemfavourites, alist);

            list.setAdapter(adapter);

        }

        private void initcomponents() {
            list = (ListView) findViewById(R.id.listfavourites_lst_list);

        }

        class CustomListAdapter extends ArrayAdapter<HashMap<String, String>> {
            Context context;
            boolean[] checkBoxState;
            int textViewResourceId;
            ArrayList<HashMap<String, String>> alist;

            public CustomListAdapter(Context context, int textViewResourceId,
                    ArrayList<HashMap<String, String>> alist) {
                super(context, textViewResourceId);
                this.context = context;
                this.alist = alist;
                this.textViewResourceId = textViewResourceId;
                checkBoxState = new boolean[alist.size()];

            }

            public int getCount() {

                return alist.size();
            }

            public View getView(final int pos, View convertView, ViewGroup parent) {
                Holder holder = null;

                LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                convertView = inflater.inflate(R.layout.listitemfavourites, parent,
                        false);
                holder = new Holder();
                holder.checkbox = (CheckBox) convertView
                        .findViewById(R.id.listitemfavourites_chk_checkbox);
                holder.itemname = (TextView) convertView
                        .findViewById(R.id.listitemfavourites_txt_itemname);
                holder.price = (TextView) convertView
                        .findViewById(R.id.listitemfavourites_txt_price);
                holder.lin_background = (LinearLayout) convertView
                        .findViewById(R.id.favourites_lin_top);
                convertView.setTag(holder);

                holder = (Holder) convertView.getTag();

                holder.itemname.setText(alist.get(pos).get("itemname"));
                holder.price.setText(alist.get(pos).get("price"));
                holder.checkbox.setChecked(checkBoxState[pos]);
                if (pos == 0) {
                    holder.lin_background
                            .setBackgroundResource(R.drawable.bg_celltop);
                } else if (pos == (alist.size() - 1) && alist.size() != 1) {

                    holder.lin_background
                            .setBackgroundResource(R.drawable.bg_cellbottom);
                }
                holder.checkbox.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        if (((CheckBox) v).isChecked())
                            checkBoxState[pos] = true;
                        else
                            checkBoxState[pos] = false;

                    }
                });

                return convertView;
            }

            class Holder {
                TextView itemname, price;
                CheckBox checkbox;
                LinearLayout lin_background;
            }
        }    
    }
公共类收藏夹扩展活动{
列表视图列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.ListFavorites);
初始化组件();
list.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3{
}
});
ArrayList alist=新的ArrayList();
对于(int i=1;i<20;i++){
HashMap hmap=新的HashMap();
hmap.put(“项目名称”、“项目名称”+i);
hmap.put(“价格”、“价格”);
列表添加(hmap);
}
最终CustomListAdapter=新CustomListAdapter(此,
R.layout.ListItemFavorites,列表);
list.setAdapter(适配器);
}
私有组件(){
列表=(ListView)findViewById(R.id.ListFavorites\u lst\u列表);
}
类CustomListAdapter扩展了ArrayAdapter{
语境;
布尔[]checkBoxState;
int textViewResourceId;
阵列主义者;
公共CustomListAdapter(上下文,int textViewResourceId,
ArrayList(列表){
super(上下文,textViewResourceId);
this.context=上下文;
this.alist=alist;
this.textViewResourceId=textViewResourceId;
checkBoxState=new boolean[alist.size()];
}
public int getCount(){
返回alist.size();
}
公共视图getView(最终int pos、视图转换视图、视图组父视图){
Holder=null;
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
convertView=充气机。充气(R.layout.ListItemFavorites,父项,
假);
保持架=新保持架();
holder.checkbox=(复选框)convertView
.findViewById(R.id.ListItemFavorites\u chk\u复选框);
holder.itemname=(TextView)convertView
.findViewById(R.id.ListItemFavorites\u txt\u itemname);
holder.price=(TextView)convertView
.findViewById(R.id.ListItemFavorites\u txt\u价格);
holder.lin_background=(LinearLayout)convertView
.findviewbyd(R.id.Favorites\u lin\u top);
convertView.setTag(支架);
holder=(holder)convertView.getTag();
holder.itemname.setText(alist.get(pos.get)(“itemname”);
holder.price.setText(alist.get(pos.get)(“价格”);
holder.checkbox.setChecked(checkBoxState[pos]);
如果(位置==0){
holder.lin_背景
.setBackgroundResource(R.drawable.bg_celltop);
}else if(pos==(alist.size()-1)和&alist.size()!=1){
holder.lin_背景
.setBackgroundResource(R.drawable.bg_cellbottom);
}
holder.checkbox.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
如果(((复选框)v).isChecked())
checkBoxState[pos]=真;
其他的
checkBoxState[pos]=false;
}
});
返回视图;
}
阶级持有者{
TextView项目名称、价格;
复选框;
线性布局林_背景;
}
}    
}

它正在工作。。但是如果我滚动listview的意思是,复选框将自动取消选中并在getView()方法中使用它。如果您不知道holder的用法,请彻底研究您的自定义listview。public View getView(int position,View convertView,ViewGroup parent){View vi=convertView;vi=inflater.inflate(R.layout.mainlist_项,null);ImageView imgview=(ImageView)vi.findViewById(R.id.list_image);TextView艺术家=(TextView)vi.findViewById(R.id.nameid);TextView视图=(TextView)vi.findViewById(R.id.deptid);imgview.setImageBitmap(imgs.get(position));艺术家.settxt(empname.get)(position));view.setText(empdept.get(position));return vi;}这是我的代码..它在单次检查时工作。但在上下滚动时未检查..请以正确的格式发布代码…不可读,请发布日志…我正在发布我的代码…理解它。