Android listview中的复选框导致异常

Android listview中的复选框导致异常,android,listview,exception,Android,Listview,Exception,我不知道崩溃堆栈的痕迹。我得到了java.lang.IllegalStateException。但并没有提示是哪个代码生成了这些错误 下面是来自Google Play控制台的错误报告 java.lang.IllegalStateException: at android.widget.ListView.layoutChildren(ListView.java:1572) at android.widget.AbsListView.onTouchUp(AbsListView.java:3

我不知道崩溃堆栈的痕迹。我得到了java.lang.IllegalStateException。但并没有提示是哪个代码生成了这些错误

下面是来自Google Play控制台的错误报告

java.lang.IllegalStateException: 
  at android.widget.ListView.layoutChildren(ListView.java:1572)
  at android.widget.AbsListView.onTouchUp(AbsListView.java:3864)
  at android.widget.AbsListView.onTouchEvent(AbsListView.java:3663)
  at android.view.View.dispatchTouchEvent(View.java:9297)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2549)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
  at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
  at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
  at android.app.Activity.dispatchTouchEvent(Activity.java:2769)
  at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
  at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
  at android.view.View.dispatchPointerEvent(View.java:9517)
  at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4242)
  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4108)
  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3654)
  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3707)
  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3673)
  at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3799)
  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3681)
  at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3856)
  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3654)
  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3707)
  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3673)
  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3681)
  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3654)
  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5969)
  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5908)
  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5869)
  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6072)
  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:192)
  at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(InputEventReceiver.java:0)
  at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:183)
  at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6043)
  at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6095)
  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
  at android.view.Choreographer.doCallbacks(Choreographer.java:670)
  at android.view.Choreographer.doFrame(Choreographer.java:600)
  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
  at android.os.Handler.handleCallback(Handler.java:746)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5443)
  at java.lang.reflect.Method.invoke(Method.java:0)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Activity\u filemanager.java中有一个列表视图

public class Activity_filemanager extends AppCompatActivity
{
    ArrayList <FiledataEx> FileListArray = new ArrayList <FiledataEx>();
    ArrayList<String>  excludeArray = new ArrayList <String> (); 
    ListView lv;
    CheckBox cb_preview;
    MyFileListAdapter adapter; 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_securedelete);
        lv = (ListView) findViewById(R.id.lv_filelist);
        cb_preview  = (CheckBox) findViewById(R.id.cb_preview);

        FileListArray = CSDCard.getFileList(m_path, m_strFilter,excludeArray);

        adapter = new MyFileListAdapter(this,FileListArray,cb_preview.isChecked() );   
        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) 
            {
                FileItem_Click(position);
            }
        });     
    } 
public class MyFileListAdapter extends BaseAdapter  {

    private LayoutInflater mInflater;
    Context context ;
    ArrayList <FiledataEx> FileListArray;
    final String TAG="adapter";
    public ImageLoader imageLoader;
    public boolean bPreview ;

    public MyFileListAdapter(Context context,ArrayList <FiledataEx> FileListArray, boolean bPreview) {

        mInflater = LayoutInflater.from(context);
        this.context = context;
        this.FileListArray = FileListArray;

        imageLoader = new ImageLoader(context);
        this.bPreview = bPreview;
    }
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        ViewHolder holder;
        boolean bDisable = false;
        File imgFile;
        String strFullPath="";

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.listfile_detail, null);
            holder = new ViewHolder();

            holder.tv_filename = (TextView) convertView.findViewById(R.id.tv_filename2);
        holder.tv_filedate = (TextView) convertView.findViewById(R.id.tv_filedate);
        holder.iv_fileicon = (ImageView) convertView.findViewById(R.id.imageView1);
        holder.cb_selected = (CheckBox )convertView.findViewById(R.id.cb_selected);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    FiledataEx r = getFiledata(position);

    holder.cb_selected.setVisibility(View.VISIBLE);
    holder.tv_filename.setText(r.strFilename);
    holder.tv_filedate.setText(r.strFilesize_kB  + " , " +    r.strFileDate );
    holder.cb_selected.setChecked(r.IsChecked() );
    holder.cb_selected.setTag(position);
    holder.cb_selected.setOnClickListener( new OnClickListener() 
    {
        @Override
        public void onClick(View v) {
            CheckBox c = (CheckBox) v;
            int row_id = (Integer) v.getTag();
            FiledataEx r = FileListArray.get(row_id);
            r.setSelected(c.isChecked());
            FileListArray.set(row_id, r);
        }
    });
    return convertView;
}
公共类活动\u文件管理器扩展AppCompatActivity
{
ArrayList FileListArray=新的ArrayList();
ArrayList excludeArray=新的ArrayList();
ListView lv;
复选框cb_预览;
MyFileListAdapter适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_securedelete);
lv=(ListView)findViewById(R.id.lv\u文件列表);
cb_preview=(复选框)findviewbyd(R.id.cb_preview);
FileListArray=CSDCard.getFileList(m_路径,m_strFilter,excludeArray);
adapter=新的MyFileListAdapter(这个,FileListArray,cb_preview.isChecked());
低压设置适配器(适配器);
lv.setOnItemClickListener(新的OnItemClickListener()
{
@凌驾
公共视图单击(适配器视图a、视图v、内部位置、长id)
{
FileItem_单击(位置);
}
});     
} 
MyFileListAdapter.java

public class Activity_filemanager extends AppCompatActivity
{
    ArrayList <FiledataEx> FileListArray = new ArrayList <FiledataEx>();
    ArrayList<String>  excludeArray = new ArrayList <String> (); 
    ListView lv;
    CheckBox cb_preview;
    MyFileListAdapter adapter; 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_securedelete);
        lv = (ListView) findViewById(R.id.lv_filelist);
        cb_preview  = (CheckBox) findViewById(R.id.cb_preview);

        FileListArray = CSDCard.getFileList(m_path, m_strFilter,excludeArray);

        adapter = new MyFileListAdapter(this,FileListArray,cb_preview.isChecked() );   
        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) 
            {
                FileItem_Click(position);
            }
        });     
    } 
public class MyFileListAdapter extends BaseAdapter  {

    private LayoutInflater mInflater;
    Context context ;
    ArrayList <FiledataEx> FileListArray;
    final String TAG="adapter";
    public ImageLoader imageLoader;
    public boolean bPreview ;

    public MyFileListAdapter(Context context,ArrayList <FiledataEx> FileListArray, boolean bPreview) {

        mInflater = LayoutInflater.from(context);
        this.context = context;
        this.FileListArray = FileListArray;

        imageLoader = new ImageLoader(context);
        this.bPreview = bPreview;
    }
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        ViewHolder holder;
        boolean bDisable = false;
        File imgFile;
        String strFullPath="";

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.listfile_detail, null);
            holder = new ViewHolder();

            holder.tv_filename = (TextView) convertView.findViewById(R.id.tv_filename2);
        holder.tv_filedate = (TextView) convertView.findViewById(R.id.tv_filedate);
        holder.iv_fileicon = (ImageView) convertView.findViewById(R.id.imageView1);
        holder.cb_selected = (CheckBox )convertView.findViewById(R.id.cb_selected);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    FiledataEx r = getFiledata(position);

    holder.cb_selected.setVisibility(View.VISIBLE);
    holder.tv_filename.setText(r.strFilename);
    holder.tv_filedate.setText(r.strFilesize_kB  + " , " +    r.strFileDate );
    holder.cb_selected.setChecked(r.IsChecked() );
    holder.cb_selected.setTag(position);
    holder.cb_selected.setOnClickListener( new OnClickListener() 
    {
        @Override
        public void onClick(View v) {
            CheckBox c = (CheckBox) v;
            int row_id = (Integer) v.getTag();
            FiledataEx r = FileListArray.get(row_id);
            r.setSelected(c.isChecked());
            FileListArray.set(row_id, r);
        }
    });
    return convertView;
}
公共类MyFileListAdapter扩展了BaseAdapter{
私人停车场;
语境;
ArrayList文件列表数组;
最后一个字符串TAG=“adapter”;
公共图像加载器;
公开审查;
公共MyFileListAdapter(上下文上下文、ArrayList FileListArray、布尔bPreview){
mInflater=LayoutInflater.from(上下文);
this.context=上下文;
this.filelistary=filelistary;
imageLoader=新的imageLoader(上下文);
this.bPreview=bPreview;
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视窗座;
布尔b禁用=false;
文件imgFile;
字符串strFullPath=“”;
if(convertView==null){
convertView=mInflater.inflate(R.layout.listfile_detail,null);
holder=新的ViewHolder();
holder.tv_filename=(TextView)convertView.findViewById(R.id.tv_filename2);
holder.tv_filedate=(TextView)convertView.findViewById(R.id.tv_filedate);
holder.iv_fileicon=(ImageView)convertView.findViewById(R.id.imageView1);
holder.cb_selected=(复选框)convertView.findViewById(R.id.cb_selected);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
FiledataEx r=getFiledata(位置);
holder.cb_selected.setVisibility(View.VISIBLE);
holder.tv_filename.setText(r.strFilename);
holder.tv\u filedate.setText(r.strFilesize\u kB+“,”+r.strFileDate);
holder.cb_selected.setChecked(r.IsChecked());
支架.cb_已选择.setTag(位置);
holder.cb_selected.setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图v){
复选框c=(复选框)v;
int row_id=(整数)v.getTag();
FiledataEx r=FileListArray.get(行id);
r、 setSelected(c.isChecked());
FileListArray.set(行id,r);
}
});
返回视图;
}
listfile_deail.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="8dp"
        android:paddingRight="8dp" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:adjustViewBounds="true"
            android:padding="8dp"
            android:scaleType="centerCrop" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:orientation="vertical"
            android:paddingLeft="8dp"
            android:paddingRight="8dp" >

            <TextView
                android:id="@+id/tv_filename2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="IMG_20150101_120029.jpg"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#0000FF"
                    android:textSize="16sp" />

                <TextView
                    android:id="@+id/tv_filedate"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="right"
                    android:text="TextView" />

        </LinearLayout>

         <CheckBox
             android:id="@+id/cb_selected"
             android:layout_width="44dp"
             android:layout_height="44dp"
             android:layout_gravity="center_vertical"
             android:focusable="false"
             android:background="@drawable/cb_selector"
            android:button="@null"
              />

    </LinearLayout>

</LinearLayout>   


在哪里定义“cb\u preview.isChecked()”?cb\u preview在活动\u filemanager.javaChange tv\u filedate layout\u width为“wrap\u content”中定义。希望有帮助!