当前位置:编程学习 > wap >>

Listview复选框的选择

原问题来自于CSDN问答频道,更多解决方案见:http://ask.csdn.net/questions/2175

问题描述:

我创建了一个自定义的 listview,有 Image,Text 和 checkbox。如何检测是否选择或未选择复选框。我使用了 onItemClick() 但是没有被调用。我使用的正确吗?
class PInfo {
    String appname = "";
    String pname = "";
    Drawable icon;
 }
public class InstalledApps extends Activity{
private static LayoutInflater inflater=null;
private ListView listview;
private Activity activity;
List<PInfo> installedApps = new ArrayList<PInfo>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.applist);
    activity = this;
    listview = (ListView)findViewById(R.id.listView1);
    PackageManager pm = getPackageManager();
    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
    for(ApplicationInfo app : packages) {
        PInfo newInfo = new PInfo();
        newInfo.appname = (String) app.loadLabel(pm);
        newInfo.pname = app.packageName;
        //newInfo.icon = app.icon;
        //Drawable dd = activity.getResources().getDrawable(app.icon);
        newInfo.icon = app.loadIcon(getPackageManager());
        if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1) {        
            installedApps.add(newInfo);
        } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
            installedApps.add(newInfo);
        } else {
            installedApps.add(newInfo);
        }
    }
    InstalledAppsAdapter iap = new InstalledAppsAdapter(this, installedApps);
    listview.setAdapter(iap);
}
  }
class InstalledAppsAdapter extends BaseAdapter{
private Activity activity;
private static LayoutInflater inflater=null;
List<PInfo> installedApps = new ArrayList<PInfo>();
ListView listview; 
public InstalledAppsAdapter(Activity a, List<PInfo> b) {
    // TODO Auto-generated constructor stub
    installedApps = b;
    activity = a;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    listview = (ListView)activity.findViewById(R.id.listView1);
       //Here is where I have put it currently..
    listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            PInfo newInfo = (PInfo) listview.getItemAtPosition(arg2);
            System.out.println(newInfo.appname);
        }
    });
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return installedApps.size();
}
@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}
@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
    // TODO Auto-generated method stub
    View  customView = inflater.inflate(R.layout.listrow, arg2,false);
    ImageView iv = (ImageView)customView.findViewById(R.id.imageView1);
    TextView tv= (TextView) customView.findViewById(R.id.textView2);
    CheckBox cb= (CheckBox)customView.findViewById(R.id.checkBox1);
    PInfo pinfo = installedApps.get(arg0);
        tv.setText(""+pinfo.appname);
        iv.setImageDrawable(pinfo.icon);
    return customView;
}
}


我要在哪里添加下面的代码(如果这是正确的listner)

listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            PInfo newInfo = (PInfo) listview.getItemAtPosition(arg2);
            System.out.println(newInfo.appname);
        }
    });


解决方案:

在 getView 里面加入下面的代码:

@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
View  customView = inflater.inflate(R.layout.listrow, arg2,false);
ImageView iv = (ImageView)customView.findViewById(R.id.imageView1);
TextView tv= (TextView) customView.findViewById(R.id.textView2);
CheckBox cb= (CheckBox)customView.findViewById(R.id.checkBox1);

cb.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
    if ( isChecked )
    {
        // perform logic
    }
}
});
}
PInfo pinfo = installedApps.get(arg0);

    tv.setText(""+pinfo.appname);
    iv.setImageDrawable(pinfo.icon);
return customView;
}
--------------------编程问答-------------------- listview = (ListView)findViewById(R.id.listView1);
后面,但是这个是点击list一个条目的,并不是点击checkbox
getView 中设置checkbox的listener --------------------编程问答-------------------- 谢谢牛人 了 --------------------编程问答-------------------- listView中的checkbox或者listItem是否独占了整个焦点呢,将 android:focusable="false"加到布局文件里面试试 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 可以解决头像自动大小 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 很简单,你把R.layout.listrow 这个布局文件,设置
setFocusable(true);
setFocusableInTouchMode(true);
即可,让checkbox的父布局获取焦点即可 --------------------编程问答-------------------- 支持!!!~~~~                             --------------------编程问答-------------------- 支持!~~~~~~~~~~ --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 谢谢牛人 了         --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 学习了 --------------------编程问答--------------------
引用 3 楼 lvyoudejiayu 的回复:
listView中的checkbox或者listItem是否独占了整个焦点呢,将 android:focusable="false"加到布局文件里面试试


上次我就是这样的问题,搞了半个小时。 --------------------编程问答-------------------- vb vb vb  --------------------编程问答-------------------- --------------------编程问答-------------------- 这个好复杂啊 --------------------编程问答-------------------- 学习了,很好啊 --------------------编程问答-------------------- 学而不思则罔,思而不学则殆 --------------------编程问答-------------------- --------------------编程问答-------------------- 15648453165 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 不错,学习了 --------------------编程问答-------------------- --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- JAVA 看不懂
--------------------编程问答-------------------- 在学习中。 --------------------编程问答-------------------- 不错 很多人有方面的困扰 --------------------编程问答-------------------- 不错 很多人有方面的困扰  --------------------编程问答-------------------- 帮顶了 --------------------编程问答-------------------- 学习了,有时间研究一下 --------------------编程问答-------------------- 厉害厉害!! --------------------编程问答-------------------- 帮顶一下。。。
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,