在我的應用程序中,我有一個自定義監聽器的列表視圖。android-在活動中是正確的從自定義監聽器獲取位置
我想在我的活動中使用onSaveInstanceState和onRestoreInstanceState,但我需要的唯一信息是在我的類CustomListener中的方法OnItemClick。
我需要4個onItemClick參數之一的參數「position」的值,因爲是唯一能夠知道列表中的哪個位置被點擊的項目。在onSaveInstanceState和onRestoreInstanceState兩個方法中,我需要知道正確恢復活動的狀態。
我的問題有兩個: 1 - 是正確的(是最佳實踐)創建方法獲取和在CustomListener設置和活動,其中有兩種方法的onSaveInstanceState和onRestoreInstanceState使用它們(我認爲這是不應該做的方式這個,但我沒有別人的想法) 2 - 一旦我有參數位置,我有問題在CustomListener的方法OnItemClick內設置此參數,因爲如果我在縱向模式,並且我傳遞到橫向模式,系統不會調用OnItemClick,因此方法中的參數不會修改,而且橫向佈局也不會被修改。
這種方法是在MainActivity:
private void populate(ListView lv){
ImageAdapter arrayAdapter;
//set list view
arrayAdapter = new ImageAdapter(this, R.layout.list_view_layout, arrayFromNumberToId, hmFromIdToName);
lv.setAdapter(arrayAdapter);
//set list listener
listener=new CustomListener(hm, hmFromIdToName, arrayFromNumberToId);
lv.setOnItemClickListener(listener);
}
這種方法是在類CustomListener:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int imageID;
String description;
String name;
imageID = arrayFromNumberToId[position];
description = hm.get(imageID);
name = hmIdToName.get(arrayFromNumberToId[position]);
extras = new Bundle();
extras.putInt("imageID", imageID);
extras.putCharSequence("description", description);
extras.putCharSequence("name", name);
if(parent.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Intent intent = new Intent(parent.getContext(), DescriptionActivity.class);
intent.putExtras(extras);
parent.getContext().startActivity(intent);
}
else{
ImageView imageViewLayout;
TextView textView;
textView = (TextView) parent.getRootView().findViewById(R.id.textDescription);
textView.setText(description);
imageViewLayout = (ImageView) parent.getRootView().findViewById(R.id.imageBig);
imageViewLayout.setImageResource(imageID);
textView = (TextView) parent.getRootView().findViewById(R.id.textName);
textView.setText(name);
textView.setTypeface(null, Typeface.BOLD);
}
}
謝謝您的回答!
非常感謝@Jason的回答! – soissy