【问题标题】:Each list item to open different activity每个列表项打开不同的活动
【发布时间】:2015-12-21 16:07:00
【问题描述】:

代码有一个ListView,点击一个列表项会弹出一个AlertDialogAlertDialog 有两个单选按钮“是”和“否”,然后是一个“确定”按钮。

当用户选择“是”时,下一个Activity 将启动,如果选择“否”,他们将留在同一个Activity

我的问题是:无论我选择哪个列表项,我都会被带到相同的 'Next-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();
    }
    });

}
}

【问题讨论】:

    标签: android listview android-intent listitem


    【解决方案1】:

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

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

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

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

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

    其中 'getMyClass()' 是一种匹配位置和目标活动的方法:

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

    【讨论】:

      【解决方案2】:

      您在 Intent 中对 second.class 进行硬编码,而是尝试使用一个动态变量,该变量根据您单击的项目保存类的值

      public static Activity ClASS_NAME;
        //set CLASS_NAME based on item position for example 
           switch (selection)
                              {
                                  case("yes"):
                                      Intent myint=new Intent(MainActivity.this,CLASS_NAME);
                                      myint.putExtra("act1","");
                                      startActivity(myint);
                                      break;
                                  case("no"):
                                      dialog.cancel();
                                      break;
                              }
      

      【讨论】:

      • 我明白了,但几周前我开始学习 Android,我不熟悉如何使用动态变量。我会尝试用谷歌搜索它。谢谢你:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2019-04-07
      • 2015-12-16
      • 1970-01-01
      • 2015-09-19
      相关资源
      最近更新 更多