当我在list_item.xml中使用checkbox时,OnListItemClick事件不起作用

时间:2016-06-23 18:32:21

标签: java android xml listview checkbox

我的代码工作正常,但当我在list_item.xml中使用复选框时,OnListItemClickstartActivity(intent)无法正常工作。我想使用复选框选择多个应用程序,并使用像吐司之类的按钮做一些动作。

我的MainActivity.java

public class MainActivity extends ListActivity {

private PackageManager packageManager = null;
private List<ApplicationInfo> applist = null;
private AppAdapter listadapter = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    packageManager = getPackageManager();

    new LoadApplications().execute();
}


@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    ApplicationInfo app = applist.get(position);

    try{
        Intent intent = packageManager.getLaunchIntentForPackage(app.packageName);

        if(intent != null) {
            startActivity(intent);
        }
    } catch(ActivityNotFoundException e) {
        Toast.makeText(MainActivity.this, e.getMessage(),  Toast.LENGTH_LONG).show();
    } catch(Exception e) {
        Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
    }
}

private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) {

    ArrayList<ApplicationInfo> appList = new ArrayList<ApplicationInfo>();

    for(ApplicationInfo info : list) {
        try{
             if(packageManager.getLaunchIntentForPackage(info.packageName) != null) {
                appList.add(info);
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    return appList;
}

 private class LoadApplications extends AsyncTask<Void, Void, Void> {

    private ProgressDialog progress = null;

    @Override
    protected Void doInBackground(Void... params) {

        applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA));

        listadapter = new AppAdapter(MainActivity.this, R.layout.list_item, applist);

        return null;
    }
 }

Adapter.java

public class AppAdapter extends ArrayAdapter<ApplicationInfo>{
private List<ApplicationInfo> appList = null;
private Context context;
private PackageManager packageManager;

public AppAdapter(Context context, int resource,
                  List<ApplicationInfo> objects) {
    super(context, resource, objects);

    this.context = context;
    this.appList = objects;
    packageManager = context.getPackageManager();
}

@Override
public int getCount() {
    return ((null != appList) ? appList.size() : 0);
}

@Override
public ApplicationInfo getItem(int position) {
    return ((null != appList) ? appList.get(position) : null);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;

    if(null == view) {
        LayoutInflater layoutInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = layoutInflater.inflate(R.layout.list_item, null);
    }

    ApplicationInfo data = appList.get(position);

    if(null != data) {
        TextView appName = (TextView) view.findViewById(R.id.app_name);
        TextView packageName = (TextView) view.findViewById(R.id.app_package);
        ImageView iconView = (ImageView) view.findViewById(R.id.app_icon);

        appName.setText(data.loadLabel(packageManager));
        packageName.setText(data.packageName);
        iconView.setImageDrawable(data.loadIcon(packageManager));
    }
    return view;
 }
 }

list_item.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="wrap_content"
android:orientation="horizontal" >

<ImageView
    android:id="@+id/app_icon"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:padding="3dp"
    android:scaleType="centerCrop"
    android:contentDescription="@null" />

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:gravity="center|center_vertical"
    android:orientation="vertical"
    android:paddingLeft="5dp"
    android:layout_weight="1">

    <TextView
        android:id="@+id/app_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/app_package"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical" />


</LinearLayout>
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >
<CheckBox           
        android:id="@+id/checkBox"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_gravity="right"
        android:gravity="end|right" />
</LinearLayout>
</LinearLayout>

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

</ListView>

</LinearLayout>

0 个答案:

没有答案