我已經看到多個關于在一個活動中顯示多個列表視圖的問題,但我的問題與兩者的 onClick 行為有關。我設置了兩個列表視圖,并動態填充它們 - 這很好用。問題在于為兩個列表設置 onClick 行為時。使用我當前的代碼,第二個列表在單擊第一個列表中的相同項目時會打開的活動之上打開所需的活動。因此,當用戶返回時,它會進入錯誤的活動,因為返回堆棧是錯誤的。我定義 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);
2 回答

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
在您的適配器中創建一個接口。然后您可以覆蓋您的活動中的方法。界面:
public interface ItemClickAdapterListener {
void itemClick(View v, int position);
}
物品點擊:
viewHolder.llayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onClickListener.itemClick(view,position);
}
});
活動代碼。像這樣創建適配器對象
YourAdpter adapter= new YourAdpter(new YourAdapter.ItemClickAdapterListener() {
@Override
public void itemClick(View v, int position) {
}
}):
添加回答
舉報
0/150
提交
取消