好的,首先,我大约在2天前开始(尝试)学习Java。我正在尝试创建一个列出所有已安装应用程序(activityInfo.loadLabel)的应用程序,并且我想在单击项目时启动该应用程序(activityInfo.packageName)我将这些存储在AppItems列表中
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; };
}我可以将字符串数组添加到我的listview中。但是,在Java中,如何将两个不同的值添加到列表视图中的同一行(也就是说)。如果你不明白我的问题,请告诉我--我会尽量详细说明
下面是我的代码:
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);我可以通过应用程序的标签名启动它吗?
发布于 2013-01-15 21:06:23
您的ArrayAdapter在您提供的布局中显示AppItem.toString()的内容。
您可以覆盖toString()以显示标签:
public void toString() {
return _appName;
}在onItemClick中,您可以通过调用
AppItem item = (AppItem) parent.getItemAtPosition(position);或者,假设appItem是可访问的(最终或活动的字段,而不是方法的局部变量)
apps.get(position);然后,您可以拥有该包并调用该活动:
Intent intent = getPackageManager().getLaunchIntentForPackage(item.getAapp());发布于 2013-01-15 20:42:51
您需要为行定义自己的布局(可以容纳任意数量的元素),然后覆盖适配器中的getView(),扩展布局,并在listview请求它时返回它。这使您能够使每一行看起来像您想要的那样,或者使每一行根据数据类型而不同(这完全取决于您的getView()返回什么-列表视图将只显示适配器返回的内容)。我不会在这里给出任何代码,因为从字面上讲,任何安卓ListView教程都会给你这些,因为这是非常基础的。
随机分布的教程:here或here
https://stackoverflow.com/questions/14337833
复制相似问题