【问题标题】:Add Intent to OnItemClickListener将 Intent 添加到 OnItemClickListener
【发布时间】:2013-08-20 15:55:19
【问题描述】:

我有一个列表视图,我希望每个按钮都打开不同的 Activity。

listview有很多选项,每个选项都会导致另一个activity。

我不知道该怎么做。

谢谢。

Java

public class AndroidListViewActivity extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String[] adobe_products = getResources().getStringArray(
                R.array.adobe_products);

        this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
                R.id.label, adobe_products));

        ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                String product = ((TextView) view).getText().toString();

                Intent i = new Intent(getApplicationContext(), mavo.class);

                i.putExtra("product", product);
                startActivity(i);

            }  });}}

listen_item XML

<?xml version="1.0" encoding="utf-8"?>
<!--  Single List Item Design -->

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/label"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dip"
        android:textSize="16dip"
        android:textStyle="bold" >

</TextView>

【问题讨论】:

  • 请准确描述问题。您显示的代码没有任何按钮。您的意思是每个列表项都应该打开不同的活动吗?您是指同一活动的不同实例,还是实际上有不同的活动类对应于不同的列表项?
  • 您是否以 QnA 方式分享您所知道的信息?
  • 有不同的Activity类对应不同的列表项。 @戴尔威尔逊
  • 你把每个人都用你的“选项”搞糊涂了。最好的方法是发布您的 XML 代码,这样可以解决问题。
  • 几乎完全正确的问题 - 在这里查看 - stackoverflow.com/questions/9302126/…

标签: android listview android-intent android-activity add


【解决方案1】:

我只是猜测,因为您没有说明您的代码出了什么问题。也许 ArrayAdapter 不仅仅使用 TextView 来布局每个列表项,因此您不能简单地将 TextView 拉出来。

试试这个来获取产品字符串: String product = adobe_products[position];

您必须将String[] adobe_products 设置为最终状态。

编辑: 根据我认为您要问的内容,试试这个:

lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            Class<? extends Activity> activityToStart = null;

            switch (position){
            case 0:
                activityToStart = MyProduct0Activity.class;
                break;
            case 1:
                activityToStart = MyProduct1Activity.class;
                break;
            //etc.
            }

            Intent i = new Intent(getApplicationContext(), activityToStart);
            startActivity(i);

        }  });

【讨论】:

  • listview中有很多选项,每个选项都会导致另一个活动。
【解决方案2】:

Okie.. 所以这就是我从你的 cmets 那里了解到的。您有一个列表视图,列表视图中的每个项目都是一个文本视图。而且当你点击每个项目时,你需要去不同的屏幕/活动。

如果是这样的话……

替换此代码

 public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                String product = ((TextView) view).getText().toString();

                Intent i = new Intent(getApplicationContext(), mavo.class);

                i.putExtra("product", product);
                startActivity(i);

            }

有了这个..

     public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {

                    Switch(position){
case 0:
String product = ((TextView) view).getText().toString();
Intent i = new Intent(AndroidListViewActivity.this, FIRST_SCREEN.class);
i.putExtra("product", product);
startActivity(i);
break;
case 1:
String product = ((TextView) view).getText().toString();
Intent i = new Intent(AndroidListViewActivity.this, SECOND_SCREEN.class);
i.putExtra("product", product);
startActivity(i);
break;

// Repeat the same for all screens
...
...
...

}


                }

注意::: 我没有测试过这段代码。这只是为了让您了解如何操作。

希望这会有所帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多