我目前正在開發一個Android項目,其中列出了安裝在手機上的所有應用程序。當用戶點擊它應該提供包名稱,以便我可以稍後啓動應用程序。目前,我將包名稱存儲在下一行,但我認爲這可能會讓某些用戶感到困惑,因爲他們實際上並不需要知道包名,而只需知道應用程序名。從應用程序列表中加載應用程序
因此,有沒有一種方法可以將包名稱存儲在ListView中(使用帶有TextView和ImageView的自定義適配器),當用戶選擇應用程序名稱時,可以檢索該名稱。
感謝您提供的任何幫助。
我目前正在開發一個Android項目,其中列出了安裝在手機上的所有應用程序。當用戶點擊它應該提供包名稱,以便我可以稍後啓動應用程序。目前,我將包名稱存儲在下一行,但我認爲這可能會讓某些用戶感到困惑,因爲他們實際上並不需要知道包名,而只需知道應用程序名。從應用程序列表中加載應用程序
因此,有沒有一種方法可以將包名稱存儲在ListView中(使用帶有TextView和ImageView的自定義適配器),當用戶選擇應用程序名稱時,可以檢索該名稱。
感謝您提供的任何幫助。
的一種方法是,你可以使用seTag (Object tag)或setTag(int key, Object tag)來存儲這些額外的信息與TextView
或這是從View
擴展NY觀點一樣:
TextView tv = findViewById(R.id.textview);
tv.setTag(<package_name_string>);
tv.getTag(); // to get the value.
另一種方法是,以這些信息存儲在一個單獨的List
並確保可以通過適配器進行訪問。
因此,有沒有一種方法可以將ListView中的包名稱(使用帶有TextView和ImageView的自定義適配器)存儲在用戶選擇應用程序名稱時可以檢索到的位置。
數據已存在於您的自定義適配器中。作爲this sample project,你可能正在使用一個ArrayAdapter
的List<ResolveInfo>
你queryIntentActivities()
回來:
List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);
Collections.sort(launchables, new ResolveInfo.DisplayNameComparator(pm));
adapter=new AppAdapter(pm, launchables);
(其中AppAdapter extends ArrayAdapter<ResolveInfo>
)
如果是這樣,你得到的信息,你需要從適配器啓動應用程序:
@Override
protected void onListItemClick(ListView l, View v,
int position, long id) {
ResolveInfo launchable=adapter.getItem(position);
ActivityInfo activity=launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
Intent i=new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);
}