android - 每个列表项打开不同的 Activity

标签 android listview android-intent listitem

代码有一个 ListView 并且点击一个列表项会弹出一个 AlertDialogAlertDialog 有两个单选按钮“yes”和“no”,然后是一个“ok”按钮。

当用户选择“yes”时,下一个 Activity 开始,如果选择“no”,他们将停留在同一个 Activity 中。

我的问题是:无论我选择哪个列表项,我都会被带到同一个 'Next-activity' 。我希望根据我选择的列表项进行不同的 Activity 。

listview = (ListView) findViewById(R.id.mylistview);
final String[] items = new String[]{"IOS", "ANDROID", "WINDOWS"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_expandable_list_item_1, items);
listview.setAdapter(adapter);

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

        int itemposition = position;

        String itemvalue = (String) listview.getItemAtPosition(position);
        final CharSequence[] items1 = {"yes", "no"};
        final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("slection confirmation");

        builder.setCancelable(false);
        builder.setSingleChoiceItems(items1, -1, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                selection = (String) items1[which];
                Toast.makeText(getApplicationContext(), items1[which], Toast.LENGTH_SHORT).show();

            }
        });
        builder.setNeutralButton("OK",new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (selection)
                {
                    case("yes"):
                        Intent myint=new Intent(MainActivity.this,secondpage.class);
                        myint.putExtra("act1","");
                        startActivity(myint);
                        break;
                    case("no"):
                        dialog.cancel();
                        break;
                }
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }
    });

}
}

最佳答案

首先,为不同 Activity 的所有类名创建字符串资源。在你的“res/strings.xml”文件中,你可以写

<string name="sFirstClass">my.package.name.MyFirstClass</string>
<string name="sSecondClass">my.package.name.MySecondClass</string>

请注意,使用 Activity 的完整路径很重要。

然后,在 OnItemClickListener 的“onItemClick()”方法中,定义一个 String 变量并根据单击的列表项的位置对其进行初始化。

// 'final' is important so the String will be visible 
// inside the dialog button's 'onClick()' method
final String SECONDPAGE_CLASS = getMyClass(position);

其中 'getMyClass()' 是匹配位置和目标 Activity 的方法:

private String getMyClass(int pos)
{
    String myClass;
    switch (pos)
    {
     case 0: myClass = getString(R.string.sFirstClass);
             break;
     case 1: myClass = getString(R.string.sSecondClass);
             break;
     //...
     default: // do whatever is appropriate
    }
return myClass;
}

现在对于您的 OK 按钮,您可以将 Intent 定义为

try 
{
    Intent myint = new Intent(MainActivity.this, Class.forName(SECONDPAGE_CLASS));
}
catch (ClassNotFoundException e)
{
   e.printStackTrace();
}

关于android - 每个列表项打开不同的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32754826/

相关文章:

android - 如何在android中以全屏模式显示电池图标和Wifi图标?

android - 未收到 MEDIA_MOUNTED 广播

android - 如何锁屏 Android

android - 尝试播放视频时 youtube 视频 400 网络

java - android fragment 无法设置按钮文本

android - 如何从请求者状态更改广播接收器获取 wifi 接入点的 SSID

android - 在带有边距的布局中使用带有标题的 ListView

android - ListView 中的动画列表项

android - 将音频编码为 AAC 会产生较慢的音频 - Android

listview - Flutter ListView不会使用setState()刷新UI,尽管itemCount和附加列表已正确更新