java - 为一个 Activity 中的多个列表定义 onItemClick 行为的正确方法?

标签 java android listview

我见过多个有关在一项 Activity 中显示多个 ListView 的问题,但我的问题与这两个 Activity 的 onClick 行为有关。我设置了两个 ListView ,并动态填充它们 - 这工作得很好。问题在于为两个列表设置 onClick 行为。使用我当前的代码,第二个列表将在单击第一个列表中的相同项目时将打开的 Activity 之上打开所需的 Activity 。因此,当用户返回时,由于返回堆栈错误,它会进入错误的 Activity 。

我定义 onItemClick 行为的代码在这里:

//make listview items respond to clicks and open relevant activity
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            // selected item
            String standard = ((TextView) view).getText().toString();

            // Launching new Activity on selecting single List Item
            Intent i = new Intent(SubjectActivity.this, StandardInfoActivity.class);
            // sending data to new activity
            i.putExtra("standard", standard);
            i.putExtra("subject", subjectId);
            i.putExtra("subjectName", subject);
            i.putExtra("level", level);
            startActivity(i);
            finish();
        }
    });

    gradeView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent2, View view,
                                int position, long id2) {
            // Launching new Activity on selecting single List Item
            Intent j = new Intent(SubjectActivity.this, AddGradeActivity.class);
            // sending data to new activity
            j.putExtra("subjectId", subjectId);
            j.putExtra("position", position);
            j.putExtra("level", level);
            j.putExtra("subject", subject);
            startActivity(j);
            finish();

        }
    });

我的猜测是,因为我为两者定义了相同的函数,所以通过单击第二个列表调用它两次,一次为第一个列表,然后再次为所需的列表调用。在这种情况下定义两个列表的行为的正确方法是什么?

编辑:用于设置适配器的代码:

ArrayList<String> mArrayList = myDb.getStandards(subjectId);

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
            this, R.layout.subject_list_item, mArrayList);
    lv.setAdapter(arrayAdapter);

    ArrayList<String> gradeList = myDb.getGrades(subjectId);

    ArrayAdapter<String> arrayAdapter2 = new ArrayAdapter<String>(
            this, R.layout.subject_list_item, gradeList);
    gradeView.setAdapter(arrayAdapter2);

最佳答案

像这样调用 finish() 将导致为当前 Activity ( https://developer.android.com/guide/components/activities/activity-lifecycle#ondestroy ) 调用 onDestroy() ,这会将其从返回堆栈中取出。所以我认为你可能会回去并得到一个令人惊讶的结果。

查看是否确实触发了两个 onItemClickListener 的一种方法是,可以向两者添加临时调试消息,然后查看获得的输出类型。例如,在一个上您可以尝试 Log.d("ClickListener", "lv was clicked");,在另一个上尝试 Log.d("ClickListener", "gradeView was clicked"); 然后检查 Logcat 并查看会出现什么情况。

关于java - 为一个 Activity 中的多个列表定义 onItemClick 行为的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141809/

相关文章:

Java 生成空白字符串

java - Android Apk 中暴露的 Google 地理位置 Api key

java - 我的 ListView 太慢了。并在向上滚动时崩溃

android - 在同一 fragment 中合并 Map 和 ListView

java - 用 Java 和 C 生成 CRC

java - 如何在 Struts 2 中使用 ModelDriven 提供两种形式

java - 用 Java 显示来自服务器的图像

android - 方向重置 Activity Android

android - 在 Android 中将 RecyclerView 与 StaggeredGridLayoutManager 一起使用时,单元格不会交错

android - 如何根据 Json 对象设置颜色代码