User incorrect cursor position

when I press the call_btn button, it shows the wrong position!

how this image is my list:

(Red numbers are wrong)

enter image description here

public class MyAdapter extends CursorAdapter
    {
        Context b;

        LayoutInflater inflater;
        @SuppressWarnings("deprecation")
        public MyAdapter(Context context, Cursor c) {
            super(context, c);
            inflater = LayoutInflater.from(context);
            b= (Context) context;
      }

    @Override
    public void bindView(View view, Context context, final Cursor cursor) {
      // TODO Auto-generated method stub
        TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
        TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);

        tv1.setText(cursor.getString(2));
        tv2.setText(cursor.getString(3));


        final Button call_btn= (Button)view.findViewById(R.id.call_btn);    

        call_btn.setOnClickListener(new Button.OnClickListener(){

           @Override
           public void onClick(View v) { 

               Toast.makeText(b, cursor.getString(1), Toast.LENGTH_SHORT).show();

           }}); 


     }

        protected Context getActivity() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
            public View newView(Context context, Cursor cursor, ViewGroup parent) {
            return inflater.inflate(R.layout.item, parent, false);
     }
}

I have seen these quastions before:

Incorrect position in user adapter

incorrect cursor adapter location

+4
source share
2 answers

A Cursoris simply the result of a database with a position indicator in the current row. When you browse your list, and new lines are filled based on the cursor data, this position indicator automatically moves for you under the covers.

, bindView() , , TextViews , call_btn.onClick(), , , , , , , onClickListener bindView().

. bindView() , , onClick():

@Override
public void bindView(View view, Context context, final Cursor cursor) {
  // TODO Auto-generated method stub
    TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
    TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);

    tv1.setText(cursor.getString(2));
    tv2.setText(cursor.getString(3));


    final Button call_btn= (Button)view.findViewById(R.id.call_btn);    
    final int position = cursor.getPosition();

    call_btn.setOnClickListener(new Button.OnClickListener(){

       @Override
       public void onClick(View v) { 

           cursor.moveToPosition(position);
           Toast.makeText(b, cursor.getString(1), Toast.LENGTH_SHORT).show();

       }}); 


 }
+13

setTag (cursor.getPosition()); call_btn:

@Override
public void bindView(View view, Context context, final Cursor cursor) {
  // TODO Auto-generated method stub
    TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
    TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);

    tv1.setText(cursor.getString(2));
    tv2.setText(cursor.getString(3));

    final Button call_btn= (Button)view.findViewById(R.id.call_btn);    
    call_btn.setTag(cursor.getPosition());

    call_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((MainActivity) context).onBtnClick((int)v.getTag());
        }
    });
}

onClickListener , :

public void onBtnClick(int position) {
    // do your stuff
}
0

Source: https://habr.com/ru/post/1532046/


All Articles