我正在开发一个Android应用,我遇到了ListActivity
的困难。我希望根据单击列表中的哪个项目启动不同的Activity
。
我制作了一个列表并在java中用setListAdapter
引用它,但我不确定如何在OnListItemClick
中引用它。我假设我需要引用列表中的位置。
使用Activity
和Buttons
,我可以设置OnClickListener
,并为每个switch
使用case
语句Button
。 ListActivity
的等价物是什么?
这是我的代码:
public class Options extends ListActivity implements {
String myHistory[]= { "Item 1", "Item 2", "Item 3" };
//---Set ListView---
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String> ( Options.this,
android.R.layout.simple_list_item_1, myHistory)));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
//--if click position 1, do below
//--Intent a = new Intent("show Item 1's corresponding page");
//--startActivity(a);
//--if click item in position 2, do below
//--Intent b = new Intent("show Item 2's corresponding page");
//--startActivity(b);
//--if click item in position 3, do below
//--Intent c = new Intent("show Item 3's corresponding page");
//--startActivity(c);
}
}
答案 0 :(得分:5)
我不确定还有其他办法,但我是这样做的: 我在活动类上设置了单击侦听器(而不是在适配器上,我认为这更有意义)。 保存您想要调用的类的数组:
Class[] classList = new Class[]{class1.class, class2.class....};
将监听器添加到listview
lv.setOnItemClickListener(listviewClickListener());
然后是onItemClickListener方法:
private OnItemClickListener listviewClickListener() {
OnItemClickListener clickListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
//And then call the corresponing one
Intent I= new Intent(thisActivity, classList[i]);
int id = listOfObjects.get(position).getId();//do whatever you want with the object on the postition "position"
Bundle bundle = new Bundle();
bundle.putInt("id", id);
i.putExtras(bundle);
thisActivity.startActivity(i);
}
};
return clickListener;
}
我没有测试类文字的数组,但我想它应该可以工作..
编辑:我在考虑你想为每个项目创建不同的活动(由于列表视图上的所有项目都属于同一个组,因此考虑它没有多大意义(没有上下文),因此可能会以相同的方式使用)。否则,您不需要活动列表,只需添加您想要的意图。
答案 1 :(得分:2)
因为看起来列表中只有少数和某些数据不在运行时,因为每个项目都有一个单独的活动(如游戏的菜单列表)所以我建议简短而简单....... < / p>
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
Intent a;
switch(position){
case 1:
a = new Intent("show Item 1's corresponding page");
break;
case 2:
a = new Intent("show Item 2's corresponding page");
break;
case 3:
a = new Intent("show Item 3's corresponding page");
break;
if(null!=a)
startActivity(a);
}
}
答案 2 :(得分:0)
您必须使用Adapter对象并使用ListView对象进行设置。
ListView listView= getListView();
Adapter medicineListAdapter = new ArrayAdapter<String>(
Options.this, android.R.layout.simple_list_item_1, myHistory);
listView.setAdapter(medicineListAdapter);
在Class implements onItemClickListener 中添加它。这个引用onItemClick方法。
答案 3 :(得分:0)
onListItemClick(ListView l, View v, int position, long id)
position Corresponding your item of myHistory
you can judge position to do something :
switch (position) {
case 1:
Intent a = new Intent("show Item 1's corresponding page");
//--startActivity(a);
依旧......