从应用程序列表中加载应用程序

问题描述:

我目前正在开发一个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,你可能正在使用一个ArrayAdapterList<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);  
    }