Android 列表视图复选框选择
我已经创建了一个自定义列表视图,其中包含图像+文本+复选框。如何检测复选框的选择/取消选择。我尝试了Monite McClick(),但它不会被调用。我用对了吗Android 列表视图复选框选择,android,checkbox,onclick,android-listview,Android,Checkbox,Onclick,Android Listview,我已经创建了一个自定义列表视图,其中包含图像+文本+复选框。如何检测复选框的选择/取消选择。我尝试了Monite McClick(),但它不会被调用。我用对了吗 class PInfo { String appname = ""; String pname = ""; Drawable icon; } public class InstalledApps extends Activity{ private static LayoutInflater inflate
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;
}
}
类PInfo{
字符串appname=“”;
字符串pname=“”;
可绘制图标;
}
公共类InstalledApps扩展活动{
专用静态充气机=空;
私有列表视图列表视图;
私人活动;
List installedApps=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.applist);
活动=此;
listview=(listview)findViewById(R.id.listView1);
PackageManager pm=getPackageManager();
List packages=pm.getinstalledApplication(PackageManager.GET_元数据);
适用于(ApplicationInfo应用程序:软件包){
PInfo newInfo=新PInfo();
newInfo.appname=(字符串)app.loadLabel(pm);
newInfo.pname=app.packageName;
//newInfo.icon=app.icon;
//Drawable dd=activity.getResources().getDrawable(app.icon);
newInfo.icon=app.loadIcon(getPackageManager());
如果((app.flags&ApplicationInfo.FLAG\u UPDATED\u SYSTEM\u app)==1){
已安装的apps.add(newInfo);
}否则如果((app.flags和ApplicationInfo.FLAG\u SYSTEM)==1){
已安装的apps.add(newInfo);
}否则{
已安装的apps.add(newInfo);
}
}
InstalledAppsAdapter iap=新的InstalledAppsAdapter(此,installedApps);
setAdapter(iap);
}
}
类InstalledAppsAdapter扩展了BaseAdapter{
私人活动;
专用静态充气机=空;
List installedApps=new ArrayList();
列表视图列表视图;
公共安装的AppsAdapter(活动a,列表b){
//TODO自动生成的构造函数存根
installedApps=b;
活动=a;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
listview=(listview)activity.findViewById(R.id.listView1);
//这是我现在放的地方。。
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
PInfo newInfo=(PInfo)listview.getItemAtPosition(arg2);
System.out.println(newInfo.appname);
}
});
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回installedApps.size();
}
@凌驾
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回arg0;
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回arg0;
}
@凌驾
公共视图getView(int arg0、视图arg1、视图组arg2){
//TODO自动生成的方法存根
视图customView=充气机。充气(R.layout.listrow,arg2,false);
ImageView iv=(ImageView)customView.findViewById(R.id.imageView1);
TextView tv=(TextView)customView.findViewById(R.id.textView2);
复选框cb=(复选框)customView.findViewById(R.id.checkBox1);
PInfo PInfo=installedApps.get(arg0);
tv.setText(“+pinfo.appname”);
iv.setImageDrawable(pinfo.图标);
返回自定义视图;
}
}
我应该在哪里添加此代码(如果这是正确的列表)
listview.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
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;
}
除了保留复选框,您可以在choise模式下使用简单的列表项多选。为什么要在
ListView
上设置onClickListener()
而不是将其设置为复选框
谢谢,这正是我想要的:)我想在ListView上使用后退按钮。但是,我无法在InstalledAppsAdapter中定义它。所以我必须在InstalledApps类中定义它。当我在listview中按back按钮时,会调用它,但在主视图中不会调用。我想在back按钮上捕获这两个事件。有什么办法吗?
@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;
}