2013-01-15 49 views
0

好吧,首先,我开始(尝试)在2天前学习Java。 我尝试做,列出了所有安装的应用程序(activityInfo.loadLabel) 的应用程序,我想推出的项目点击(activityInfo.packageName) 我有这些存储在AppItems列表应用ListView添加项目

class AppItem{ 
    String _appname; 
    public String getAppname(){return _appname;}; 
    public void setAppname(String value){_appname = value;}; 
    String _app; 
    public String getApp(){ return _app; }; 
    public void setApp(String value){_app = value; }; 
} 

我可以添加一个字符串数组到我的列表视图就好了。 但我如何添加2个不同的值到同一行(可以这么说)在列表视图 - 在Java中。 请告诉我,如果你不明白我的问题 - 和il'l尝试制定最佳的

这里是我的代码:

ArrayList<AppItem> apps; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
     mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
     final List<ResolveInfo> pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0); 
     AppItem appItem = new AppItem(); 
     for (ResolveInfo applicationInfo : pkgAppsList) { 
      appItem._appname = (String) applicationInfo.activityInfo.loadLabel(getPackageManager()); 
      appItem._app= applicationInfo.activityInfo.packageName; 
      apps.add(appItem); 
     } 

     ArrayAdapter<AppItem> adapter = new ArrayAdapter<AppItem>(this,android.R.layout.simple_list_item_1,apps); 

     ListView listView = new ListView(this);  
     listView.setAdapter(adapter); 
     setContentView(listView); 

     listView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
        long id) { 
       String item = ((TextView)view).getText().toString();    
       Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show(); 

      } 
     }); 

    } 
class AppItem{ 
    String _appname; 
    public String getAppname(){return _appname;}; 
    public void setAppname(String value){_appname = value;}; 
    String _app; 
    public String getApp(){ return _app; }; 
    public void setApp(String value){_app = value; }; 
} 

或 有使用

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address"); 
startActivity(LaunchIntent); 
替代

我可以通过其标签名称启动应用程序吗?

+0

我不明白为什么你需要在同一行 – njzk2

+0

在2项以及我所需要的文本作为标签 - 我需要调用的包名,所以我可以得到应用程序启动 - 除非有办法通过标签启动应用程序?在c#我会使用文本字段和描述字段或类似的东西,所以我可以得到所选项目的描述 – VisualBean

+0

请点击链接[按照链接](http://impressive-artworx.de/2011/list -all-installed-apps-in-style /) – skygeek

回答

1

你ArrayAdapter显示的AppItem.toString()在你给它的布局内容。

您可以覆盖的toString()来显示标签:

public void toString() { 
    return _appName; 
} 
在onItemClick

,您可以通过调用

AppItem item = (AppItem) parent.getItemAtPosition(position); 

获得该项目,或者因为appItem是可访问的(无论是最终或您的活动领域而不是本地变量的方法)

apps.get(position); 

您可以t母鸡有封装和调用活动:

Intent intent = getPackageManager().getLaunchIntentForPackage(item.getAapp()); 
+0

不幸地重写了toString没有工作 @override public String toString(){return _appname;}对不对? - 如果我手动输入返回值,它将返回该值,但如果我使用“_appname”它将返回列表上的最后一个应用程序400次 - 。 - 但如果添加一个数组列表。加载标签它添加标签就好 - 我没有正确存储的值? – VisualBean

+0

我的不好 - 在循环内创建了一个新的appitem实例 - 它工作正常! – VisualBean

1

您需要为行(可以包含任意数量的元素)定义自己的布局,然后在您的适配器中覆盖getView(),扩大您的布局并在listview请求时返回它。这使您可以根据需要使每行看起来不同,或者根据数据类型让每行都有所不同(这完全取决于您的getView()返回 - 列表视图将只显示哪些适配器回退)。我在这里没有提供任何代码,因为从字面上看,任何Android ListView教程都会给你,因为这是非常基础的。

随机发现教程:herehere