OnClick в динамическом CursorAdapter
Добавлено: 14 май 2014, 02:06
Народ, есть такая проблема, думаю многие сталкивались, инфа в инертетах есть, но что-то победить не могу((.
В кратце, есть ListView в который из локальной базы через CursorAdapter поступает инфа(имя продукта).
Layut-файл для одного рядка
Далее самое интересное. При нажатии на эл-т списка в этом эл-те должен выбраться CheckBox и например TextView изменить цвет(вообще-то в onClick() я читаю _id эл-та таблицы и занощу его в arraylist и дальше перекидываю по приложению, но это сейас не важно).
Вот код моего CursorAdapter
И вроде бы все хорошо и все работает все подсвечиваеться, только пока не начинаешь список листать и пока не вступает в работу так называемый механизм recycleView. Нажимал на одном, пролистал увидел другие эл-ты тоже подсветило, вернулся назад(к началу списка), там подсвечен совершенно другой эл-т (не тот на который нажимал).
При добавление эл-та в базу(через LoaderManager.LоaderCallback<Cursor>) в ListView подсвеченный эл-т смещаеться на один вниз(по списку).
Вообщем вот такая вот ерунда. Обьясните на русском языке в какую сторону капать.
Заранее благодарен
В кратце, есть ListView в который из локальной базы через CursorAdapter поступает инфа(имя продукта).
Layut-файл для одного рядка
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/itemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="69dp"
android:layout_marginTop="21dp"
android:textSize="@dimen/collapsedTitle" />
<CheckBox
android:id="@+id/itemStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/itemName"
android:layout_alignBottom="@+id/itemName"
android:layout_alignParentRight="true"
android:layout_marginRight="43dp"
android:focusable="false"
android:focusableInTouchMode="false" />
</RelativeLayout>Вот код моего CursorAdapter
Код: Выделить всё
public class ItemAdapter extends CursorAdapter{
private LayoutInflater mLayoutInflater;
private static final String TAG = "ItemAdapter.class";
private int position;
public ItemAdapter(Context context, Cursor c, int flags) {
super(context, c, flags);
// TODO Auto-generated constructor stub
mLayoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
Log.i(TAG, "Invoke bindView()");
ViewHolder mbindViewHolder = (ViewHolder) view.getTag();
mbindViewHolder.currentTextView.setText(
cursor.getString(cursor.getColumnIndex(PurchaseDataBase.ITEM_NAME)));
mbindViewHolder.currentTextView.setOnClickListener(new MyTextViewListener(mbindViewHolder.currentTextView,
cursor.getPosition()));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Log.i(TAG, "Invoke newView()");
// TODO Auto-generated method stub
ViewHolder mViewHolder = new ViewHolder();
View currentView = mLayoutInflater.inflate(R.layout.item_layout,parent,false);
mViewHolder.currentTextView = (TextView) currentView.findViewById(R.id.itemName);
mViewHolder.currentCheckBox = (CheckBox) currentView.findViewById(R.id.itemStatus);
position = cursor.getPosition();
Log.i(TAG, "Cursor position in newView() "+String.valueOf(position));
mViewHolder.currentTextView.setTag(position);
/*currentView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i(TAG, "onClick in newView");
Log.i(TAG, "Cursor position in newView is: "+ String.valueOf(mViewHolder.position));
}
});*/
currentView.setTag(mViewHolder);
return currentView;
}
static class ViewHolder{
protected TextView currentTextView;
protected CheckBox currentCheckBox;
}
class MyTextViewListener implements View.OnClickListener {
View mview;
int position;
public MyTextViewListener(View v, int position) {
// TODO Auto-generated constructor stub
this.mview = v;
this.position = position;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
v.setBackgroundColor(Color.CYAN);
}
}
}
При добавление эл-та в базу(через LoaderManager.LоaderCallback<Cursor>) в ListView подсвеченный эл-т смещаеться на один вниз(по списку).
Вообщем вот такая вот ерунда. Обьясните на русском языке в какую сторону капать.
Заранее благодарен