如何在ListActivity中引用OnListItemClick

时间:2012-06-19 07:49:05

标签: android listactivity

我正在开发一个Android应用,我遇到了ListActivity的困难。我希望根据单击列表中的哪个项目启动不同的Activity

我制作了一个列表并在java中用setListAdapter引用它,但我不确定如何在OnListItemClick中引用它。我假设我需要引用列表中的位置。

使用ActivityButtons,我可以设置OnClickListener,并为每个switch使用case语句ButtonListActivity的等价物是什么?

这是我的代码:

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);
    }
}

4 个答案:

答案 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);

依旧......