【发布时间】:2011-12-19 00:44:05
【问题描述】:
我有一个数组成功地显示为主要活动的列表视图。在过去的几天里,我一直在使用许多教程来尝试找出从单击此列表视图的项目开始不同活动的最佳方法。我已经看到了从 switch 语句到通过变量调用类的所有内容,但似乎没有任何效果。我可能会使用 if 语句,但我的列表有 120 多个条目。有什么建议吗?
【问题讨论】:
标签: android android-listview android-intent android-activity
我有一个数组成功地显示为主要活动的列表视图。在过去的几天里,我一直在使用许多教程来尝试找出从单击此列表视图的项目开始不同活动的最佳方法。我已经看到了从 switch 语句到通过变量调用类的所有内容,但似乎没有任何效果。我可能会使用 if 语句,但我的列表有 120 多个条目。有什么建议吗?
【问题讨论】:
标签: android android-listview android-intent android-activity
为什么不把class作为item的参数呢?
package com.ybi;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class YbiListActivity extends ListActivity
{
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
ClickableItem[] values = new ClickableItem[1];
// here you can add your label and your activity
values[0] = new ClickableItem("Hello", YbiListActivity.class);
ArrayAdapter<ClickableItem> adapter = new ArrayAdapter<ClickableItem>(this, android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
ClickableItem item = (ClickableItem) getListAdapter().getItem(position);
Intent intent = new Intent(YbiListActivity.this, (Class<?>) item.itemClass);
startActivity(intent);
Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
}
private class ClickableItem
{
public String itemLabel;
public Object itemClass;
public ClickableItem(String ilabel, Object iclass)
{
itemLabel = ilabel;
itemClass = iclass;
}
@Override
public String toString()
{
return itemLabel;
}
}
}
【讨论】:
您可以在 arrays.xml 中创建两个新数组(list_items 和 list_item_activities) 然后,当一个项目被选中时,您可以使用它的索引来查找关联的活动。
<string-array name="list_items">
<item>ExampleActivity</item>
...
</string-array>
<string-array name="list_item_activities">
<item>com.example.app.ExampleActivity</item>
...
</string-array>
为了解释更多,您将使用 list_items 来创建列表:
String[] list = getResources().getStringArray("list_items");
for(int i = 0; i < list.length; i++){
// add the item
}
那么当item被点击时:
public void onListItemClick(ListView l, View v, int position, long id){
String[] activities = getResources().getStringArray("list_item_activities");
// activities[position] is what you would use
}
【讨论】: