ViewSwitcher アイテムを含む ListView があります。目標は、リスト項目をタップして ViewSwitcher ビューを切り替えることです。タップは期待どおりに機能しますが、タップされたアイテムから離れてからスクロールして戻ると、ViewSwitcher から 2 番目のビューを表示しているアイテムが変更されることがあります。
これが私の ListView アイテムのレイアウトです。ViewSwitcher は @+id/details です。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content" >
<ViewSwitcher
android:id = "@+id/details"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:measureAllChildren = "false" >
<!-- two views I want to switch between are here -->
</ViewSwitcher>
</RelativeLayout>
@id/details を見つけて .showNext() を呼び出す私のアクティビティ。
public class MyActivity extends ListActivity {
private MySQLiteOpenHelper data;
private SimpleCursorAdapter adapter;
private Cursor cursor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] FROM = { "_id", "_id", "name", "name" };
int[] TO = { R.id.my_list_id, R.id.my_list_id2, R.id.my_list_name, R.id.my_list_name_details };
data = new MySQLiteOpenHelper(this);
cursor = data.myList();
startManagingCursor(cursor);
adapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor, FROM, TO);
setListAdapter(adapter);
ListView list = getListView();
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
ViewSwitcher item = (ViewSwitcher) view.findViewById(R.id.details);
item.showNext();
}
});
}
}
私の問題は、 @id/details が実際には一意ではないため、スクロール時に未定義の動作が発生することだと思います。
この場合、各 ViewSwitcher に一意の ID を割り当てる方法、または .showNext() を呼び出す正しい ViewSwitcher を見つける方法を教えてください。