0

我创建了一个具有图像 + 文本 + 复选框的自定义列表视图。如何检测复选框的选择/取消选择。我试过 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;


}

}

我应该在哪里添加此代码(如果这是正确的侦听器),

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);
        }
    });

谢谢..

4

2 回答 2

1

在里面写代码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;


}
于 2012-08-07T06:50:35.403 回答
1

Insted 保留复选框,您可以在选择模式下使用 simple_list_item_multiple_choice。

于 2012-08-07T07:22:22.147 回答