私のアプリでは、インストールされているアプリケーションをリストビューに一覧表示する必要があります。アプリは、インストールされたアプリをバックグラウンドスレッドでフェッチします。要件は、フェッチが完了していなくてもリストにデータを入力することです。つまり、arraylistにエントリが1つある場合は、そのアイテムを含むarraylistを表示します。これは可能ですか?助けてください。よろしくお願いします。
3 に答える
2
まず、これは、アプリケーションデータをバックグラウンドで処理するためにループを使用する場合にのみ可能です。アウトライン:
アプリ情報を保持するクラス:
Class AppData {
public final Drawable icon;
public final String name;
public AppData(Drawable i, String n){
this.icon = i;
this.name = n;
}
}
アプリを検索するためのAsynckTask:
AsyncTask<Void,AppData,Void> scanAppsTask = new AsyncTask<Void,AppData,Void>{
@Override
public Void doInBackground(Void... args){
//--get list---
List<ApplicationInfo> apps = mPm.getInstalledApplications(
PackageManager.GET_UNINSTALLED_PACKAGES |
PackageManager.GET_DISABLED_COMPONENTS);
//--run a loop--
for(ApplicationInfo appInfo : apps){
AppData newFound;
//---find app details, load app icon etc---
publishProgress(newFound);
}
//---done---
return null;
}
@Override
public void onProgressUpdate(AppData... data){
//---update list for every app found----
myListAdapter.add(data[0]);
myListAdapter.notifyDataSetChanged();
}
}
scanAppsTask.execute();
于 2012-11-14T08:27:52.563 に答える
1
私は同様のアプリに取り組んでいました。そこでは、インストールされているすべてのアプリケーション(組み込みのアプリケーションも含む)をフェッチする必要があります。私は次のコードでこれを行いました、
TextView data;
ImageView image1;
LinearLayout holdlayout;
View l1;
private ArrayList results = new ArrayList();
List<ResolveInfo> list;
TextView result;
String str="";
Drawable icon;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
l1 = findViewById(R.id.Layout1);
PackageManager pm = this.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
list = pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED);
for (ResolveInfo rInfo : list)
{
str = rInfo.activityInfo.applicationInfo.loadLabel(pm).toString() + "\n";
results.add(rInfo.activityInfo.applicationInfo.loadLabel(pm).toString());
Log.w("Installed Applications", rInfo.activityInfo.applicationInfo.loadLabel(pm).toString());
icon = rInfo.activityInfo.applicationInfo.loadIcon(pm);
holdlayout = new LinearLayout(getApplicationContext());
holdlayout.setOrientation(LinearLayout.HORIZONTAL);
data = new TextView(getApplicationContext());
data.setText(str);
image1 = new ImageView(getApplicationContext());
image1.setBackgroundDrawable(icon);
((ViewGroup) holdlayout).addView(image1);
((ViewGroup) holdlayout).addView(data);
((ViewGroup) l1).addView(holdlayout);
}
}
このコードに問題がある場合はお知らせください。
于 2012-11-14T07:49:58.153 に答える
1
のアダプタにアイテムを動的に追加/削除できるListView
ので、新しいアイテムが利用可能になり次第、バックグラウンドスレッドからアイテムを1つずつリストに追加できます。
于 2012-11-14T07:57:56.667 に答える