2017-01-31 7 views
0

Я настраиваю пользовательскую кнопку с помощью setOnClickLIstener внутри CursorAdapter. У меня есть Toast, который получает позицию внутри onClick. Сообщение Toast, привязанное к этой позиции, создает номер позиции ожидания. Но передаваемые данные являются случайной позицией.setOnClickListener получает правильное положение, но передаёт неправильные данные

public class BottomListViewAdapter extends CursorAdapter { 

    public BottomListViewAdapter(Context context, Cursor cursor) { 
     super(context, cursor, 0); 
    } 

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

    @Override 
    public void bindView(View view, final Context context, final Cursor cursor) { 
     ViewHolder holder; 

     holder = new ViewHolder(); 
     holder.tvFirstName = (TextView) view.findViewById(R.id.personFirstName); 
     holder.tvLastName = (TextView) view.findViewById(R.id.personLastName); 
     holder.tvTitle = (TextView) view.findViewById(R.id.personTitle); 
     holder.mPeepPic = (ImageView) view.findViewById(R.id.person_photo); 
     holder.mDetailsButton = (ImageButton) view.findViewById(R.id.fullDetailButton); 
     holder.mCardView = (CardView) view.findViewById(R.id.home_screen_cardView); 

     String mFirstName = cursor.getString(cursor.getColumnIndexOrThrow("First_name")); 
     String mLastName = cursor.getString(cursor.getColumnIndexOrThrow("Last_name")); 
     String mTitle = cursor.getString(cursor.getColumnIndexOrThrow("Payroll_title")); 
     String mThumbnail = cursor.getString(cursor.getColumnIndexOrThrow("ThumbnailData")); 

     holder.tvFirstName.setText(mFirstName); 
     holder.tvLastName.setText(mLastName); 
     holder.tvTitle.setText(mTitle); 

     if (mThumbnail != null) { 
      byte[] imageAsBytes = Base64.decode(mThumbnail.getBytes(), Base64.DEFAULT); 
      Bitmap parsedImage = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length); 
      holder.mPeepPic.setImageBitmap(parsedImage); 
     } else { 
      holder.mPeepPic.setImageResource(R.drawable.img_place_holder_adapter); 
     } 

     holder.mDetailsButton.setTag(cursor.getPosition()); 
     holder.mDetailsButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int position = (Integer) view.getTag(); 
       Toast.makeText(context, "The position is " + position, Toast.LENGTH_SHORT).show(); 
       String mEmployeeNumber = cursor.getString(1); 
       String mEmail = cursor.getString(8); 
       String mFirstName = cursor.getString(2); 
       String mLastName = cursor.getString(3); 
       String mPhoneMobile = cursor.getString(4); 
       String mPhoneOffice = cursor.getString(5); 
       String mCostCenter = cursor.getString(10); 
       String mHasDirectReports = cursor.getString(7); 
       String mTitle = cursor.getString(6); 
       String mPic = cursor.getString(9); 
       Intent mIntent = new Intent(context, EmployeeFullInfo.class); 
       mIntent.putExtra("Employee_number", mEmployeeNumber); 
       mIntent.putExtra("Email", mEmail); 
       mIntent.putExtra("First_name", mFirstName); 
       mIntent.putExtra("Last_name", mLastName); 
       mIntent.putExtra("Phone_mobile", mPhoneMobile); 
       mIntent.putExtra("Phone_office", mPhoneOffice); 
       mIntent.putExtra("Cost_center_id", mCostCenter); 
       mIntent.putExtra("Has_direct_reports", mHasDirectReports); 
       mIntent.putExtra("Payroll_title", mTitle); 
       mIntent.putExtra("ThumbnailData", mPic); 
       mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       view.getContext().startActivity(mIntent); 
      } 
     }); 

     holder.mCardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(context, "PASS DATA TO TOP LIST", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    public static class ViewHolder { 
     TextView tvFirstName; 
     TextView tvLastName; 
     TextView tvTitle; 
     ImageView mPeepPic; 
     ImageButton mDetailsButton; 
     CardView mCardView; 
    } 
} 

ответ

0

Так что я, наконец, смог получить эту работу. Я устанавливал позицию до того, как setOnClickListener ошибался, и неправильно понял его в onClick. Я должен был изменить 2 строки

Оригинальная строка кода:

holder.mDetailsButton.setTag(cursor.getPosition()); 

изменено на:

final int position = cursor.getPosition(); 

перед setOnClickListener, а затем внутри метода OnClick пришлось изменить

Оригинальная линия кода:

int position = (Integer) view.getTag(); 

изменен:

cursor.moveToPosition(position); 
0

вы можете попробовать это,

cursor.moveToFirst(); 
while (cursor.isAfterLast() == false) { 
     String mEmployeeNumber = cursor.getString(cursor.columnIndex(1)); 
    }  
    cur.moveToNext(); 
} 
+0

бы использовать cursor.getPostion(); в начале bindView или внутри OnClickListener? Имея небольшую проблему, я понимаю, откуда я беру позицию. –

+0

У вас есть заголовок для столбцов? –

+0

Да, у меня есть textViews, привязанный к курсору.getString (cursor.getColumnIndexOrThrow ("Column_name)), внутри моего CursorAdapter для каждого столбца я хочу передать вышеупомянутый вопрос. Я просто не уверен, как передать точное положение щелчок, чтобы передать это другой активности, чтобы заполнить новый макет. –

 Смежные вопросы

  • Нет связанных вопросов^_^