ダウンロードしたすべてのアプリは ListView にあり、各アプリの横には 2 つのチェックボックスがあるため、各アプリをカテゴリ 1 またはカテゴリ 2 に分類できます。私は CheckBox 機能を組み込む方法に混乱しています。私はこのことについて読んでいますが、それでも少し圧倒されます。私のアダプターは次のようになります。
package com.mypackage;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
import com.example.android.home.R;
import java.util.List;
public class AppInfoAdapter extends BaseAdapter {
List<PackageInfo> packageList;
Activity context;
PackageManager packageManager;
public AppInfoAdapter(Activity context, List<PackageInfo> packageList, PackageManager packageManager) {
super();
this.context = context;
this.packageList = packageList;
this.packageManager = packageManager;
}
private class ViewHolder {
TextView apkName;
CheckBox arcade, educational;
}
public int getCount() {
return packageList.size();
}
public Object getItem(int position) {
return packageList.get(position);
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater = context.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_layout, null);
holder = new ViewHolder();
holder.apkName = (TextView) convertView.findViewById(R.id.appname);
holder.category1 = (CheckBox) convertView.findViewById(R.id.category1);
holder.category2 = (CheckBox) convertView.findViewById(R.id.category2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
PackageInfo packageInfo = (PackageInfo) getItem(position);
Drawable appIcon = packageManager
.getApplicationIcon(packageInfo.applicationInfo);
String appName = packageManager.getApplicationLabel(
packageInfo.applicationInfo).toString();
appIcon.setBounds(0, 0, 55, 55);
holder.apkName.setCompoundDrawables(appIcon, null, null, null);
holder.apkName.setCompoundDrawablePadding(15);
holder.apkName.setText(appName);
//more stuff for checkboxes?
return convertView;
}
}
それは基本的に機能し、すべてのアプリを一覧表示し、チェックボックスを正常に表示します。チェックボックスの1つがチェックされた場合に何が起こるかを定義する場所がわかりませんか?
メインコードは今のところ次のようになります。
public class ScanApps extends Activity {
PackageManager packageManager;
ListView apkList;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.scan_apps);
{packageManager = getPackageManager();
List<PackageInfo> packageList = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
List<PackageInfo> installedapps = new ArrayList<PackageInfo>();
for(PackageInfo apps: packageList){
if(!isSystemPackage(apps)){
installedapps.add(apps);
}
}
Collections.sort(installedapps, new Comparator<PackageInfo>() {
public int compare(PackageInfo o1, PackageInfo o2) {
return o1.applicationInfo.loadLabel(getPackageManager()).toString().compareToIgnoreCase(o2.applicationInfo.loadLabel(getPackageManager()).toString());
}
});
apkList = (ListView) findViewById(R.id.listApps);
apkList.setAdapter(new AppInfoAdapter(this, installedapps, packageManager));
} //this code loads all installed Android Apps into a list
}
private boolean isSystemPackage(PackageInfo pkgInfo) {
return ((pkgInfo.applicationInfo.flags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) != 0) ? true
: false;
} //excludes system apps
}