Android 在Listview中保留复选框状态

Android 在Listview中保留复选框状态,android,android-listview,android-checkbox,Android,Android Listview,Android Checkbox,我无法在listview中保持复选框状态。关于这个问题,我试过很多问题。但是还没有找到任何解决办法。请有人帮帮我。这是自定义适配器中的getView方法 @Override public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(

我无法在listview中保持复选框状态。关于这个问题,我试过很多问题。但是还没有找到任何解决办法。请有人帮帮我。这是自定义适配器中的getView方法

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);



        View rowView = inflater.inflate(R.layout.row_sub_packages, parent,
                false);

        TextView title = (TextView) rowView.findViewById(R.id.textView1);

        TextView desc = (TextView) rowView.findViewById(R.id.textView2);

        TextView sub = (TextView) rowView.findViewById(R.id.TextView01);
        TextView book = (Button) rowView.findViewById(R.id.button2);

        CheckBox fav = (CheckBox) rowView.findViewById(R.id.check1);

        Flag.clear();
        Flag = dh.getData(6, "packages");

        boolean flag = false;

        for (int i = 0; i < Flag.size(); i++) {

            if (Flag.get(i)
                    .equals(SubPackagesFragment.Sub_cat_Id[position])) {

                Log.i("Flag true", "Flag true " + Flag.get(i) + " "
                        + SubPackagesFragment.Sub_cat_Id[position]);

                flag = true;
            }

            else {
                flag = false;
            }

        }

        if (flag == true) {
            fav.setChecked(true);
        }

        else {
            fav.setChecked(false);
        }

        fav.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                // TODO Auto-generated method stub

                if (isChecked == true) {

                    dh.addfav(Title[position], sub_cat_Sub[position],
                            sub_cat_des[position], Images[position],
                            "packages",
                            SubPackagesFragment.Sub_cat_Id[position]);

                    // Toast.makeText(getContext(),
                    // Title[position]+"+"+SubPackagesFragment.Sub_cat_Id[position],
                    // Toast.LENGTH_SHORT).show();

                } else {
                    // Toast.makeText(getContext(), "off",
                    // Toast.LENGTH_SHORT).show();

                    dh.delete(SubPackagesFragment.Sub_cat_Id[position],
                            "packages");

                }

            }
        });


        title.setText(Title[position]);




        return rowView;

}
@覆盖
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
视图行视图=充气机。充气(R.layout.row\u sub\u包,父,
假);
TextView title=(TextView)rowView.findViewById(R.id.textView1);
TextView desc=(TextView)rowView.findViewById(R.id.textView2);
TextView sub=(TextView)rowView.findViewById(R.id.TextView01);
TextView book=(按钮)rowView.findViewById(R.id.button2);
复选框fav=(复选框)rowView.findviewbyd(R.id.check1);
Flag.clear();
Flag=dh.getData(6,“包”);
布尔标志=假;
对于(int i=0;i
您正在循环执行
ArrayList
,问题是当您检测到
true
时,如果
true
语句不在末尾,您仍将循环并检测到
false
。所以试着设置
breaktrue

后的code>。使用
SparseBooleanArray
尝试此操作。还是这个