ListView中的多选有BUG大家知道吗

解决方案 »

  1.   

    getListView().setCacheColorHint(Color.TRANSPARENT);
    或者在xml中给ListView设置这个属性 android:cacheColorHint="#00000000" 
      

  2.   

    大家请看!http://www.baidu.com/s?wd=android+ListView+Bug&inputT=7547
      

  3.   

    main.xml代码如下:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button android:text="对话框中是复选列表" android:id="@+id/button5"
    android:layout_width="wrap_content" android:layout_height="wrap_content"></Button></LinearLayout>
    Main.java代码如下:
    package wrongDialogListView.test.run;import java.lang.reflect.Field;import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnMultiChoiceClickListener;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckedTextView;
    import android.widget.ListView;public class Main extends Activity {
    private Button button5; @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); // //////////////////// button5 = (Button) this.findViewById(R.id.button5);
    button5.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) { final String[] userInfoArray = new String[] { "我是A", "我是B",
    "我是C", "我是D" }; final AlertDialog adRef = new AlertDialog.Builder(Main.this)
    .setMultiChoiceItems(userInfoArray,
    new boolean[] { true, false, true, false },
    new OnMultiChoiceClickListener() {
    public void onClick(DialogInterface arg0,
    int arg1, boolean arg2) {
    Log.v("zzzzzzzzzzzz", "" + arg1 + "  "
    + arg2);
    }
    }).create(); adRef.setButton("全选", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface arg0, int arg1) { ListView lv = adRef.getListView(); for (int i = 0; i < lv.getCount(); i++) {
    lv.setItemChecked(i, true);
    } try {
    Field field = adRef.getClass().getSuperclass()
    .getDeclaredField("mShowing");
    field.setAccessible(true);
    // 将mShowing变量设为false,表示对话框已关闭
    field.set(adRef, false);
    adRef.dismiss();
    } catch (Exception e) { }
    }
    }); adRef.setButton3("反选", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface arg0, int arg1) { ListView lv = adRef.getListView(); for (int i = 0; i < lv.getCount(); i++) {
    View view = lv.getChildAt(i); if (view instanceof CheckedTextView) {
    ((CheckedTextView) view).toggle(); }
    } try {
    Field field = adRef.getClass().getSuperclass()
    .getDeclaredField("mShowing");
    field.setAccessible(true);
    // 将mShowing变量设为false,表示对话框已关闭
    field.set(adRef, false);
    adRef.dismiss();
    } catch (Exception e) { } }
    });
    adRef.setButton2("确定", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface arg0, int arg1) { ListView lv = adRef.getListView(); for (int i = 0; i < lv.getCount(); i++) {
    if (lv.getCheckedItemPositions().get(i)) {
    Log.v("多选选中了:", ""
    + lv.getAdapter().getItemId(i) + "  "
    + lv.getAdapter().getItem(i));
    }
    } try {
    Field field = adRef.getClass().getSuperclass()
    .getDeclaredField("mShowing");
    field.setAccessible(true);
    // 将mShowing变量设为false,表示对话框已关闭
    field.set(adRef, true);
    adRef.dismiss();
    } catch (Exception e) { }
    }
    }); adRef.show(); } });
    }
    }大家可以运行一下,点击全选再点击反选再点击其中的checkboxview就会发现BUG了
      

  4.   

    哈哈
    这个bug我去年就发现了
    百度搜到的第二个就是转载我的
      

  5.   

    支持下,android的bug多了去了。