Не удается получить правильные данные с помощью пользовательской реализации simplecursoradapter
Я должен сделать небольшое изменение в одном из моих существующих приложений. У него есть просмотр списка, который извлекает данные из базы данных и отображает их с помощью специального simplecursoradapter.
Мне нужно внести некоторые изменения в слушателе onclick на изображении, показанном в пользовательском списке.
Я не могу получить правильные данные для элемента, щелкнувшего в просмотре списка.
ListItem
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight">
<TextView
android:id="@+id/tvWord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/ivSpeak"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
</RelativeLayout>
Cursor temp=mDbHelper.fetchAllNotes();
String[] from=new String[]{DbAdapter.KEY_WORD};
int[] to= new int[]{R.id.tvWord};
words = new MySimpleCursorAdapter(this.getActivity(), R.layout.word_list_item, temp, from, to);
public Cursor fetchAllNotes(){
return mDb.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_WORD}, null, null, null, null, null);
}
public class MySimpleCursorAdapter extends SimpleCursorAdapter{
Cursor temp;
public MySimpleCursorAdapter(Context context, int layout, Cursor cursor,
String[] from, int[] to) {
super(context, layout, cursor, from, to);
temp=cursor;
temp.moveToFirst();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row=super.getView(position, convertView, parent);
ImageView ivSpeak=(ImageView) row.findViewById(R.id.ivSpeak);
final TextView tvWord=(TextView) row.findViewById(R.id.tvWord);
temp.moveToPosition(position);
final int pos=position;
ivSpeak.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try{
Log.d("ambit", temp.getString(temp.getColumnIndexOrThrow(DbAdapter.KEY_WORD))+"word"); // This is not giving the correct word in my dataset
Log.d("ambit", pos + "position"); //This is fine
}
catch (Exception e){
e.printStackTrace();
}
}
1 ответ
Решение
Попробуйте moveToPosition() вашего курсора на вашем onClickListener:
@Override
public void onClick(View v) {
try{
temp.moveToPosition(position);
Log.d("ambit", temp.getString(temp.getColumnIndexOrThrow(DbAdapter.KEY_WORD))+"word"); // This is not giving the correct word in my dataset
Log.d("ambit", pos + "position"); //This is fine
}
catch (Exception e){
e.printStackTrace();
}
}