列表视图自定义适配器随机检查值 [英] List View custom adapter randomly checking values

查看:172
本文介绍了列表视图自定义适配器随机检查值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了一个列表视图与自定义适配器有一个ImageView的,TextView的和一个复选框

  -------------------------------------- - 
< ImageView的--- --- TextView的复选框>
---------------------------------------

在ListView有一个onClickListener它和复选框有onCheckListener ..

我使用了一个布尔数组(称为状态)来设置的复选框选中,或在开始时没有初始化为false。

假设我有名单上的19个项目,我先检查项目的复选框,它工作正常且布尔数组的索引0更改为真。
但是,当我滚动和检查列表的最后一个项目第三的位置被反射,布尔数组的索引3成真的话。

还有很多其他的复选框被自动选中。

的Java code

 公共类Search_list延伸活动{静态字符串STR1 =V1,str2的=V2;
字符串s,项目,国际直拨电话;
静态INT SPNR,范围1,范围2;
私人CarHelper dbcarhelper = NULL;
私人光标ourCursor;
CarHelper H = NULL;
清单<的String []> names2 = NULL;
LV的ListView;
MyCustomAdapter DataAdapter的= NULL;
私人的ArrayList<布尔>状态;的byte []图片= NULL;
光标C;
位图德codedByte;字符串c1_make = NULL,c1_model = NULL,c1_ver = NULL,c2_make = NULL,
        c2_model = NULL,c2_ver = NULL;INT CNTR = 0;按钮B1;复选框CB;保护ProgressDialog对话框;清单<的String []> mlist =新的ArrayList<的String []>();
TextView的TV1;ArrayList的<串GT; STG1;ArrayList的<串GT; arr_make =新的ArrayList<串GT;();
ArrayList的<串GT; arr_model =新的ArrayList<串GT;();
ArrayList的<串GT; arr_ver =新的ArrayList<串GT;();
ArrayList的<&位图GT; arr_img =新的ArrayList<&位图GT;();
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    // TODO自动生成方法存根
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.search_list);    对话框= ProgressDialog.show(Search_list.this,加载,
            请稍候...);    状态=新的ArrayList<布尔>(); /    LV =(ListView控件)findViewById(R.id.list);    // ------------------比较按钮的onClick()------------------------- -----    B1 =(按钮)findViewById(R.id.btnCmp);
    b1.setOnClickListener(新Button.OnClickListener(){        公共无效的onClick(查看为arg0){            诠释计数= 1;            如果(CNTR == 1){
                Toast.makeText(getApplicationContext(),
                        请至少选择两车!
                        Toast.LENGTH_LONG).show();
            }其他{                的for(int i = 0; I< status.size();我++){                    的System.out.println(比较点击位置=+ I +状态:
                            + status.get(I));
                    //的System.out.println();                    如果(status.get(ⅰ)){                        如果(计数== 2){
                            c2_make = arr_make.get(ⅰ);
                            c2_model = arr_model.get(ⅰ);
                            c2_ver = arr_ver.get(ⅰ);                            算上++;
                        }                        如果(计数== 1){
                            c1_make = arr_make.get(ⅰ);
                            c1_model = arr_model.get(ⅰ);
                            c1_ver = arr_ver.get(ⅰ);                            算上++;
                        }                    }其他{                    }                }                意向意图=新意图(Search_list.this,DispComp.class);
                束B =新包();                b.putString(CAR1,c1_make);
                b.putString(CARM1,c1_model);
                b.putString(carv1,c1_ver);                b.putString(CAR2,c2_make);
                b.putString(carm2,c2_model);
                b.putString(carv2,c2_ver);                intent.putExtras(二);
                startActivity(意向);
            }
        }
    });    // ------------------------------------------------ --------------------------    dbcarhelper =新CarHelper(本);
    dbcarhelper.createDatabase();
    dbcarhelper.openDataBase();    如果(S!= NULL){
        startManagingCursor(ourCursor);
    }    如果(SPNR == 1){        byMakeModel();
    }    如果(SPNR == 2){        byBudgetFuel();    }    fill_list();    的for(int i = 0; I< arr_make.size();我++){
        status.add(假);
    }    的System.out.println(内部的onCreate()...状态的所有空..!);    dialog.dismiss();}公共无效SETID(字符串S1,S2的字符串,int类型){    的System.out.println(SetMake SPNR = |+ SPNR +|);
    的System.out.println(SetMake S = |S +|);    STR1 = S1;
    STR2 = S2;
    SPNR =秒;    的System.out.println(SetMake AFTR SPNR = |+ SPNR +|);}公共无效SetBudgetFuel(字符串S1,S2的字符串,int类型,诠释R1,R2 INT){    的System.out.println(SetBudget SPNR = |+ SPNR +|);
    的System.out.println(SetBudget S = |S +|);    的System.out.println(SetBudget R1 = |+ R1 +|);
    的System.out.println(SetBudget R2 = |+ R2 +|);    STR1 = S1;
    STR2 = S2;
    SPNR =秒;
    范围1 = R1;
    范围2 = R2;    的System.out.println(SetMake AFTR SPNR = |+ SPNR +|);}// ------------------------------------------------ -------------------------公共无效byMakeModel(){    //从N模式选择*******************************    如果(str2.equalsIgnoreCase((选择))){        dbcarhelper.search_by_make(STR1);    }其他{        dbcarhelper.search_by_makemodel(STR1,STR2);    }}// ------------------------------------------------ -------------------------公共无效byBudgetFuel(){    //预算或选择燃料
    // ************    如果(str1.equalsIgnoreCase(任何预算)){        dbcarhelper.search_by_fuel(STR2);    }    否则,如果(str2.equalsIgnoreCase(全部)){        dbcarhelper.search_by_budget(范围1,范围2);    }    其他{        dbcarhelper.search_by_budgetfuel(STR2,范围1,范围2);    }}// ------------------------------------------------ -------------------------公共无效fill_list(){
    最后CarHelper H =新CarHelper(getApplicationContext());    Toast.makeText(getApplicationContext(),如果内幕案,
            Toast.LENGTH_LONG).show();    mlist = h.selectAllb2();    STG1 =新的ArrayList<串GT;();    INT X = 0;
    串英镑;    对于(字符串[] SRCH:mlist){        英镑=品牌:+ SRCH [0] +\\ nModel:+ SRCH [1] +\\ n版本:
                + SRCH [2] +\\ nPrice:卢比+ SRCH [3];        stg1.add(STG);        arr_make.add(SRCH [0]);
        arr_model.add(SRCH [1]);
        arr_ver.add(SRCH [2]);        的System.out.println(SRCH 0+ SRCH [0] +\\ nsrch 1+ SRCH [1]
                +\\ nsrch 2+ SRCH [2] +\\ nsrch 3+ SRCH [3]);        X ++;
    }    的System.out.println(长度---------------------+ stg1.size());    // - - - - - - - - 图片 - - - - - - - - - -
    INT运行= 0;
    C = dbcarhelper.fetchImgRow(1);    如果(c.moveToFirst()){
        做{            图像= c.getBlob(c.getColumnIndex(img_str));            的System.out.println(图像=+图像);            的System.out.println(运行=+运行);            字节[]德codedString = Base64.de code(图像,Base64.DEFAULT);
            德codedByte = BitmapFactory.de codeByteArray的(德codedString,0,
                    德codedString.length);            arr_img.add(德codedByte);            System.gc()的;            运行++;        }而(c.moveToNext());    }
    dbcarhelper.close();    // - - - - - - - - 图片 - - - - - - - - - -     的System.out.println(结束后的run()=+运行);    DataAdapter的=新MyCustomAdapter(这一点,R.layout.new_search_adptr,STG1);    LV.setAdapter(DataAdapter的);    INT []颜色= {0,0xff00ffff,0};
    LV.setDivider(新GradientDrawable(Orientation.RIGHT_LEFT,颜色));
    LV.setDividerHeight(4);    LV.setOnItemClickListener(新OnItemClickListener(){        @覆盖
        公共无效onItemClick(适配器视图<>母公司,观景,
                INT位置,长的id){            New_Details DET =新New_Details();            的System.out.println(内部咔嚓!);            字符串CAR1 = h.srch_make.get(位置);
            字符串CARM1 = h.srch_model.get(位置);
            字符串carv1 = h.srch_ver.get(位置);            det.setImg(arr_img.get(位置));            //位图car_img = arr_img.get(位置);
            //的System.out.println(位置:+位置);
            //的System.out.println(arr_img立场:+
            // arr_img.get(位置));            意向意图=新意图(Search_list.this,New_Details.class);
            束B =新包();
            b.putString(CAR1,CAR1);
            b.putString(CARM1,CARM1);
            b.putString(carv1,carv1);            intent.putExtras(二);
            startActivity(意向);        }
    });}私有类MyCustomAdapter扩展ArrayAdapter<串GT; {    公共MyCustomAdapter(上下文的背景下,INT textViewResourceId,    ArrayList的<串GT; SLIST){
        超(背景下,textViewResourceId,SLIST);    }    私有类ViewHolder {
        TextView的文本;
        复选框chkbox;
        ImageView的ImageView的;
    }    @覆盖
    公共查看getView(最终诠释的立场,观点convertView,
            父母的ViewGroup){        ViewHolder支架=无效;
        //Log.v(\"ConvertView,将String.valueOf(位置));        如果(convertView == NULL){            LayoutInflater VI =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);            convertView = vi.inflate(R.layout.new_search_adptr,NULL);            持有人=新ViewHolder();
            holder.text =(TextView中)convertView
                    .findViewById(R.id.adapterText1);
            holder.chkbox =(复选框)convertView
                    .findViewById(R.id.checkBox1);            // ----------设置复选框-----------------------------------            如果(status.get(位置)){                holder.chkbox.setChecked(真);            }其他{                holder.chkbox.setChecked(假);
            }            // ------------------------------------------------ -----------------            holder.imageview =(ImageView的)convertView
                    .findViewById(R.id.imageView1);            convertView.setTag(保持器);            holder.chkbox.setOnClickListener(新View.OnClickListener(){
                公共无效的onClick(视图v){                    复选框CB =(复选框)V;
                    如果(cb.isChecked()){                        //用户检查(选择)汽车
                        // **********                        如果(CNTR→1){                            //以上两款车选择                            Toast.makeText(getApplicationContext(),
                                    请选择只有两种车!
                                    Toast.LENGTH_LONG).show();                            cb.setChecked(假);                        }其他{                            //选车
                            status.set(位置,真正的);
                            CNTR ++;                            的System.out.println(清洁香港列表位置=+位置);                            的for(int i = 0; I< status.size();我++){                                的System.out.println(Chkbox CHKD位置=+ I +状态:
                                        + status.get(I));
                            }
                        }                    }其他{                        //用户未选中(德 - 选择)汽车
                        // **********
                        cntr--;
                        status.set(位置,FALSE);                        的System.out.println(Unchk列表位置=+位置);                        的for(int i = 0; I< status.size();我++){                            的System.out.println(UnChkbox CHKD位置=+ I +状态:
                                    + status.get(I));
                        }                    }                }
            });        }其他{            支架=(ViewHolder)convertView.getTag();
            holder.chkbox.setOnCheckedChangeListener(NULL);        }        holder.text.setText(stg1.get(位置)的ToString());        //设置图像
        holder.imageview.setImageBitmap(arr_img.get(位置));        返回convertView;
    }
}}

请帮我找到一个解决方案。谢谢你。

堆栈跟踪

  6月八日至17日:58:16.798:W / dalvikvm(698):主题ID = 1:螺纹未捕获的异常退出(组= 0x40015560)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):致命异常:主要
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):java.lang.OutOfMemoryError:位图大小超过VM预算
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.graphics.BitmapFactory.nativeDe codeByteArray的(本机方法)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.graphics.BitmapFactory.de codeByteArray的(BitmapFactory.java:405)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.graphics.BitmapFactory.de codeByteArray的(BitmapFactory.java:418)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在com.MyAuto.Search_list.fill_list(Search_list.java:334)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在com.MyAuto.Search_list.onCreate(Search_list.java:196)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:931)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.os.Handler.dispatchMessage(Handler.java:99)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.os.Looper.loop(Looper.java:123)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在android.app.ActivityThread.main(ActivityThread.java:3683)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在java.lang.reflect.Method.invokeNative(本机方法)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在java.lang.reflect.Method.invoke(Method.java:507)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
6月8日至17日:58:主营业务收入168.08:E / AndroidRuntime(698):在dalvik.system.NativeStart.main(本机方法)


解决方案

有关参考使用示例

<一个href=\"http://stackoverflow.com/questions/18162931/android-get-selected-item-using-checkbox-in-listview-when-i-click-a-button/18164177#18164177\">Android:获取选定的项目列表视图中使用复选框,当我点击一个按钮

更改适配器类以下。

您需要重写 getCount将,并使用 SparseBooleanArray

 私有类MyCustomAdapter扩展ArrayAdapter&LT;串GT;实现CompoundButton.OnCheckedChangeListener {    ArrayList的&LT;串GT; myList中;
    公共MyCustomAdapter(上下文的背景下,INT textViewResourceId,    ArrayList的&LT;串GT; SLIST){
        超(背景下,textViewResourceId,SLIST);
        mCheckStates =新SparseBooleanArray(sList.size());
         myList中= SLIST;
    }
    私人SparseBooleanArray mCheckStates;
    私有类ViewHolder {
        TextView的文本;
        复选框chkbox;
        ImageView的ImageView的;
    }    @覆盖
    公众诠释的getCount(){
        返回stg1.size();
    }    @覆盖
    公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
        ViewHolder支架=无效;
        如果(convertView == NULL){
            LayoutInflater VI =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.new_search_adptr,NULL);
            持有人=新ViewHolder();
            holder.text =(TextView中)convertView
                    .findViewById(R.id.adapterText1);
            holder.chkbox =(复选框)convertView
                    .findViewById(R.id.checkBox1);
            holder.imageview =(ImageView的)convertView
                    .findViewById(R.id.imageView1);
            convertView.setTag(保持器);        }其他{
            支架=(ViewHolder)convertView.getTag();
        }
        holder.chkbox.setTag(位置);
        holder.chkbox.setChecked(mCheckStates.get(位置,FALSE));
        holder.chkbox.setOnCheckedChangeListener(本);
        holder.text.setText(stg1.get(位置)的ToString());
        holder.imageview.setImageBitmap(arr_img.get(位置));
        返回convertView;
    }     公共布尔器isChecked(INT位置){
         返回mCheckStates.get(位置,FALSE);
     }     公共无效setChecked(INT位置,布尔器isChecked){
         mCheckStates.put(位置,器isChecked);     }     公共无效切换(INT位置){
         setChecked(位置,器isChecked(位置)!);     }
    @覆盖
    公共无效onCheckedChanged(CompoundButton buttonView,
            布尔器isChecked){
         mCheckStates.put((整数)buttonView.getTag(),器isChecked);    }
}

要得到按钮点击

  StringBuilder的结果=新的StringBuilder();
的for(int i = 0; I&LT; youradapter.mCheckStates.size();我++)
{
如果(youradapter.mCheckStates.get(我)==真)
{
result.append(arr_make.get(ⅰ)的ToString()++ arr_model.get(ⅰ)的ToString()++ arr_ver.get(ⅰ)的ToString());
result.append(\\ n);
}
}
Toast.makeText(MainActivity.this,因此,1000).show();
}

I have made a list view with a custom Adapter having an imageview, textview and a checkBox

---------------------------------------
<ImageView --- textView --- checkbox >
---------------------------------------

The listview has an onClickListener to it and the checkboxes have onCheckListener..

I have used a boolean array (named as status) to set the checkboxes checked or not initialized to false in the begining.

Suppose I have 19 items on the list and I check the checkbox of first item it works properly and index 0 of the boolean array is changed to true. But when I scroll and check the last item 3rd position of the list is reflected and index 3 of the boolean array turns true.

Also many other checkboxes are automatically checked.

Java Code

public class Search_list extends Activity {

static String str1 = "v1", str2 = "v2";
String s, item, idd;
static int spnr, range1, range2;
private CarHelper dbcarhelper = null;
private Cursor ourCursor;
CarHelper h = null;
List<String[]> names2 = null;
ListView LV;
MyCustomAdapter dataAdapter = null;
private ArrayList<Boolean> status;

byte[] Image = null;
Cursor c;
Bitmap decodedByte;

String c1_make = null, c1_model = null, c1_ver = null, c2_make = null,
        c2_model = null, c2_ver = null;

int cntr = 0;

Button b1;

CheckBox cb;

protected ProgressDialog dialog;

List<String[]> mlist = new ArrayList<String[]>();
TextView tv1;

ArrayList<String> stg1;

ArrayList<String> arr_make = new ArrayList<String>();
ArrayList<String> arr_model = new ArrayList<String>();
ArrayList<String> arr_ver = new ArrayList<String>();
ArrayList<Bitmap> arr_img = new ArrayList<Bitmap>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search_list);

    dialog = ProgressDialog.show(Search_list.this, "Loading",
            "Please Wait...");

    status = new ArrayList<Boolean>(); /

    LV = (ListView) findViewById(R.id.list);

    //------------------ Compare button onClick() ------------------------------

    b1 = (Button) findViewById(R.id.btnCmp);
    b1.setOnClickListener(new Button.OnClickListener() {

        public void onClick(View arg0) {

            int count = 1;

            if (cntr == 1) {
                Toast.makeText(getApplicationContext(),
                        "Please select atleast two cars!",
                        Toast.LENGTH_LONG).show();
            } else {

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

                    System.out.println("Compare click Position= " + i + " Status: "
                            + status.get(i));
                    // System.out.println();

                    if (status.get(i)) {

                        if (count == 2) {
                            c2_make = arr_make.get(i);
                            c2_model = arr_model.get(i);
                            c2_ver = arr_ver.get(i);

                            count++;
                        }

                        if (count == 1) {
                            c1_make = arr_make.get(i);
                            c1_model = arr_model.get(i);
                            c1_ver = arr_ver.get(i);

                            count++;
                        }

                    } else {

                    }

                }

                Intent intent = new Intent(Search_list.this, DispComp.class);
                Bundle b = new Bundle();

                b.putString("car1", c1_make);
                b.putString("carm1", c1_model);
                b.putString("carv1", c1_ver);

                b.putString("car2", c2_make);
                b.putString("carm2", c2_model);
                b.putString("carv2", c2_ver);

                intent.putExtras(b);
                startActivity(intent);
            }
        }
    });

    //--------------------------------------------------------------------------

    dbcarhelper = new CarHelper(this);
    dbcarhelper.createDatabase();
    dbcarhelper.openDataBase();

    if (s != null) {
        startManagingCursor(ourCursor);
    }

    if (spnr == 1) {

        byMakeModel();
    }

    if (spnr == 2) {

        byBudgetFuel();

    }

    fill_list();

    for (int i = 0; i < arr_make.size(); i++) {
        status.add(false);
    }

    System.out.println("Inside onCreate() ... status all null..! ");

    dialog.dismiss();

}

public void SetId(String s1, String s2, int s) {

    System.out.println("SetMake spnr= |" + spnr + "|");
    System.out.println("SetMake s= |" + s + "|");

    str1 = s1;
    str2 = s2;
    spnr = s;

    System.out.println("SetMake aftr spnr= |" + spnr + "|");

}

public void SetBudgetFuel(String s1, String s2, int s, int r1, int r2) {

    System.out.println("SetBudget spnr= |" + spnr + "|");
    System.out.println("SetBudget s= |" + s + "|");

    System.out.println("SetBudget r1= |" + r1 + "|");
    System.out.println("SetBudget r2= |" + r2 + "|");

    str1 = s1;
    str2 = s2;
    spnr = s;
    range1 = r1;
    range2 = r2;

    System.out.println("SetMake aftr spnr= |" + spnr + "|");

}

// -------------------------------------------------------------------------

public void byMakeModel() {

    // make n model selected *******************************

    if (str2.equalsIgnoreCase("(Select)")) {

        dbcarhelper.search_by_make(str1);

    } else {

        dbcarhelper.search_by_makemodel(str1, str2);

    }

}

// -------------------------------------------------------------------------

public void byBudgetFuel() {

    // budget or fuel selected
    // ************************************************

    if (str1.equalsIgnoreCase("Any Budget")) {

        dbcarhelper.search_by_fuel(str2);

    }

    else if (str2.equalsIgnoreCase("All")) {

        dbcarhelper.search_by_budget(range1, range2);

    }

    else {

        dbcarhelper.search_by_budgetfuel(str2, range1, range2);

    }

}

// -------------------------------------------------------------------------

public void fill_list() {
    final CarHelper h = new CarHelper(getApplicationContext());

    Toast.makeText(getApplicationContext(), "Inside if case",
            Toast.LENGTH_LONG).show();

    mlist = h.selectAllb2();

    stg1 = new ArrayList<String>();

    int x = 0;
    String stg;

    for (String[] srch : mlist) {

        stg = "Make: " + srch[0] + "\nModel: " + srch[1] + " \nVersion: "
                + srch[2] + "\nPrice: Rs. " + srch[3];

        stg1.add(stg);

        arr_make.add(srch[0]);
        arr_model.add(srch[1]);
        arr_ver.add(srch[2]);

        System.out.println("srch 0" + srch[0] + "\nsrch 1" + srch[1]
                + "\nsrch 2" + srch[2] + "\nsrch 3" + srch[3]);

        x++;
    }

    System.out.println("length--------------------- " + stg1.size());

    // ----------------Image--------------------
    int run = 0;
    c = dbcarhelper.fetchImgRow("1");

    if (c.moveToFirst()) {
        do {

            Image = c.getBlob(c.getColumnIndex("img_str"));

            System.out.println("Image = " + Image);

            System.out.println("run = " + run);

            byte[] decodedString = Base64.decode(Image, Base64.DEFAULT);
            decodedByte = BitmapFactory.decodeByteArray(decodedString, 0,
                    decodedString.length);

            arr_img.add(decodedByte);

            System.gc();

            run++;

        } while (c.moveToNext());

    }
    dbcarhelper.close();

    // ----------------Image--------------------

    System.out.println("run after close() = " + run);

    dataAdapter = new MyCustomAdapter(this, R.layout.new_search_adptr, stg1);

    LV.setAdapter(dataAdapter);

    int[] colors = { 0, 0xff00ffff, 0 };
    LV.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors));
    LV.setDividerHeight(4);

    LV.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            New_Details det = new New_Details();

            System.out.println("Inside Click !");

            String car1 = h.srch_make.get(position);
            String carm1 = h.srch_model.get(position);
            String carv1 = h.srch_ver.get(position);

            det.setImg(arr_img.get(position));

            // Bitmap car_img = arr_img.get(position);
            // System.out.println("position: " + position);
            // System.out.println("arr_img position: " +
            // arr_img.get(position));

            Intent intent = new Intent(Search_list.this, New_Details.class);
            Bundle b = new Bundle();
            b.putString("car1", car1);
            b.putString("carm1", carm1);
            b.putString("carv1", carv1);

            intent.putExtras(b);
            startActivity(intent);

        }
    });

}

private class MyCustomAdapter extends ArrayAdapter<String> {

    public MyCustomAdapter(Context context, int textViewResourceId,

    ArrayList<String> sList) {
        super(context, textViewResourceId, sList);

    }

    private class ViewHolder {
        TextView text;
        CheckBox chkbox;
        ImageView imageview;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {

        ViewHolder holder = null;


        //Log.v("ConvertView", String.valueOf(position));

        if (convertView == null) {

            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = vi.inflate(R.layout.new_search_adptr, null);

            holder = new ViewHolder();
            holder.text = (TextView) convertView
                    .findViewById(R.id.adapterText1);
            holder.chkbox = (CheckBox) convertView
                    .findViewById(R.id.checkBox1);

            //---------- Setting the checkBoxes -----------------------------------

            if (status.get(position)) {

                holder.chkbox.setChecked(true);

            } else {

                holder.chkbox.setChecked(false);
            }

            //-----------------------------------------------------------------

            holder.imageview = (ImageView) convertView
                    .findViewById(R.id.imageView1);

            convertView.setTag(holder);

            holder.chkbox.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {

                    CheckBox cb = (CheckBox) v;
                    if (cb.isChecked()) {

                        // User checked (selected) a car
                        // *********************************

                        if (cntr > 1) {

                            // More than two cars selected

                            Toast.makeText(getApplicationContext(),
                                    "Please select only two cars!",
                                    Toast.LENGTH_LONG).show();

                            cb.setChecked(false);

                        } else {

                            // car selected


                            status.set(position, true);
                            cntr++;

                            System.out.println("Chk List Position= " + position );

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

                                System.out.println("Chkbox chkd Position= " + i + " Status: "
                                        + status.get(i));
                            }
                        }

                    } else {

                        // User Unchecked (de - selected) a car
                        // *********************************


                        cntr--;
                        status.set(position, false);

                        System.out.println("Unchk List Position= " + position );

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

                            System.out.println("UnChkbox chkd Position= " + i + " Status: "
                                    + status.get(i));
                        }

                    }

                }
            });

        } else {

            holder = (ViewHolder) convertView.getTag();
            holder.chkbox.setOnCheckedChangeListener(null);

        }

        holder.text.setText(stg1.get(position).toString());

        // setting image
        holder.imageview.setImageBitmap(arr_img.get(position));

        return convertView;
    }
}

}

Please help me find a solution. Thank you.

Stack Trace

08-17 06:58:16.798: W/dalvikvm(698): threadid=1: thread exiting with uncaught exception (group=0x40015560)
08-17 06:58:16.808: E/AndroidRuntime(698): FATAL EXCEPTION: main
08-17 06:58:16.808: E/AndroidRuntime(698): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:405)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:418)
08-17 06:58:16.808: E/AndroidRuntime(698):  at com.MyAuto.Search_list.fill_list(Search_list.java:334)
08-17 06:58:16.808: E/AndroidRuntime(698):  at com.MyAuto.Search_list.onCreate(Search_list.java:196)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.os.Looper.loop(Looper.java:123)
08-17 06:58:16.808: E/AndroidRuntime(698):  at android.app.ActivityThread.main(ActivityThread.java:3683)
08-17 06:58:16.808: E/AndroidRuntime(698):  at java.lang.reflect.Method.invokeNative(Native Method)
08-17 06:58:16.808: E/AndroidRuntime(698):  at java.lang.reflect.Method.invoke(Method.java:507)
08-17 06:58:16.808: E/AndroidRuntime(698):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-17 06:58:16.808: E/AndroidRuntime(698):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-17 06:58:16.808: E/AndroidRuntime(698):  at dalvik.system.NativeStart.main(Native Method)

解决方案

For reference use the example

Android: Get Selected Item Using Checkbox in Listview when I click a Button

Change your adapter class to below.

You need to override getCount and use SparseBooleanArray

private class MyCustomAdapter extends ArrayAdapter<String> implements CompoundButton.OnCheckedChangeListener{

    ArrayList<String> myList; 
    public MyCustomAdapter(Context context, int textViewResourceId,

    ArrayList<String> sList) {
        super(context, textViewResourceId, sList);
        mCheckStates = new SparseBooleanArray(sList.size());
         myList= sList;
    }
    private SparseBooleanArray mCheckStates;
    private class ViewHolder {
        TextView text;
        CheckBox chkbox;
        ImageView imageview;
    }

    @Override
    public int getCount() {
        return stg1.size();
    }

    @Override
    public View getView(final int position, View convertView,ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.new_search_adptr, null);
            holder = new ViewHolder();
            holder.text = (TextView) convertView
                    .findViewById(R.id.adapterText1);
            holder.chkbox = (CheckBox) convertView
                    .findViewById(R.id.checkBox1);
            holder.imageview = (ImageView) convertView
                    .findViewById(R.id.imageView1);
            convertView.setTag(holder);          

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.chkbox.setTag(position);
        holder.chkbox.setChecked(mCheckStates.get(position, false));
        holder.chkbox.setOnCheckedChangeListener(this);
        holder.text.setText(stg1.get(position).toString());
        holder.imageview.setImageBitmap(arr_img.get(position));
        return convertView;
    }

     public boolean isChecked(int position) {
         return mCheckStates.get(position, false);
     }

     public void setChecked(int position, boolean isChecked) {
         mCheckStates.put(position, isChecked);

     }

     public void toggle(int position) {
         setChecked(position, !isChecked(position));

     }
    @Override
    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {


         mCheckStates.put((Integer) buttonView.getTag(), isChecked);    

    }
}

To get on Button click

StringBuilder result = new StringBuilder();
for(int i=0;i<youradapter.mCheckStates.size();i++)
{
if(youradapter.mCheckStates.get(i)==true)
{
result.append(arr_make.get(i).toString()+" "+arr_model.get(i).toString()+" "+arr_ver.get(i).toString());
result.append("\n");
}
}
Toast.makeText(MainActivity.this, result, 1000).show();
}

这篇关于列表视图自定义适配器随机检查值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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