Android复选框不能被勾选

yuchu 发布于 2013/04/26 19:58
阅读 6K+
收藏 0

点击复选框不能被勾选,怎么回事?

加载中
0
Bown
Bown

ListView中的复选框?是不是勾上之后拉下去再拉上来就没了?

每一个Item的View在不可见的时候都会销毁掉,然后要可见时重新生成的,所以需要单独用一个boolean数组记录当前列表的勾选状态,在getView里面把对应True值的CheckBox勾上

yuchu
yuchu
@CodeMage 是本来就勾选不了,点了没有反应,没有对勾
0
xiangmao
xiangmao
最好把ListView的item布局文件和相应的Adapter源码贴出来,不然根本不知道是哪里的问题。
0
yuchu
yuchu
@xiangmao  源代码:package com.example.appmanager;


import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.ListActivity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


@SuppressLint("UseValueOf")
public class NextActivity extends ListActivity {
/** Called when the activity is first created. */  
    Context context = null;   
    CheckBox checkbox;
List<Integer> list = new ArrayList<Integer>();
    
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.activity_list);   
        context = getApplicationContext();   
        setListAdapter(new NextAdapter(MainActivity.mApps, context));   
    }   
    
    @SuppressLint("UseValueOf")
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
if (list.contains(new Integer(position))) {
checkbox.setChecked(false);
list.remove(new Integer(position));
}else {
checkbox.setChecked(true);
list.add(new Integer(position));
}

    class NextAdapter extends BaseAdapter{  
    private CheckBox checkbox;
    Context mcontext = null;
    List<ResolveInfo> infoList = null;
    PackageManager pm = null;
   
    public NextAdapter(List<ResolveInfo> infoList,Context mcontext){
    this.mcontext = mcontext;
    this.infoList = infoList;
    pm = mcontext.getPackageManager();
    }
   
        public int getCount() {   
            // TODO Auto-generated method stub   
            return infoList.size();   
        }   


        public Object getItem(int position) {   
            // TODO Auto-generated method stub   
            return infoList.get(position);   
        }   


        public long getItemId(int position) {   
            // TODO Auto-generated method stub   
            return position;   
        }   


        @SuppressLint("UseValueOf")
    public View getView(int position, View convertView, ViewGroup parent) {   
            if (null == convertView){   
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
                convertView = inflater.inflate(R.layout.list_items, parent, false);   
            }  
            ImageView icon = (ImageView) convertView.findViewById(R.id.pic);
            TextView title = (TextView)convertView.findViewById(R.id.lab);   
            checkbox = (CheckBox)convertView.findViewById(R.id.box);   
            checkbox.setTag(new Integer(position));      
            if (list != null) {
            checkbox.setChecked(list.contains(new Integer(position))); 
    } else {
    checkbox.setChecked(false);   
    }
            icon.setImageDrawable(infoList.get(position).loadIcon(pm));
    title.setText(infoList.get(position).loadLabel(pm));
            return convertView;   
        }   
    }  


}

布局文件:<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  
  <ImageView
    android:id="@+id/pic"
    android:scaleType="fitCenter"
    android:layout_gravity="center_horizontal|center_vertical"
    android:layout_width="40dp"
    android:layout_height="40dp" />
  <TextView
      android:id="@+id/lab"
    android:layout_width="240dp"
    android:textSize="15sp"
    android:layout_height="40dp"
    android:gravity="left|center_vertical" />
   <CheckBox        
       android:id="@+id/box"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:focusable="false" 
       android:clickable="false" 
    />  
 
</LinearLayout>

0
xiangmao
xiangmao
CheckBox都设置成了 android:clickable="false" ,怎么可能会被选中?
yuchu
yuchu
@xiangmao 这里是要这样设置的,这样设置才能点击那一行就可以被选择
0
xiangmao
xiangmao

引用来自“xiangmao”的答案

CheckBox都设置成了 android:clickable="false" ,怎么可能会被选中?

仔细看了下你的代码,发现这个方法有问题:

protected void onListItemClick(ListView l, View v, int position, long id) { 
// TODO Auto-generated method stub 
super.onListItemClick(l, v, position, id); 
if (list.contains(new Integer(position))) { 
checkbox.setChecked(false); 
list.remove(new Integer(position)); 
}else { 
checkbox.setChecked(true); 
list.add(new Integer(position)); 

这个checkbox一直都是null,这里应该会报NullPointException,你在if语句前面加上这句试试checkbox = (CheckBox)v.findViewById(R.id.box);其他地方应该是没问题的。

yuchu
yuchu
嗯嗯
返回顶部
顶部