gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:33 24 4
gpt4 key购买 nike

我见过多个有关在一项 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com