2017-01-31 3 views
0

Ich setze eine benutzerdefinierte Schaltfläche mit einem setOnClickLIstener in einem CursorAdapter. Ich habe einen Toast, der die Position in onClick bekommt. Die Toast-Nachricht, die an diese Position gebunden ist, erzeugt die expect-Positionsnummer. Aber die übergebenen Daten sind eine zufällige Position.setOnClickListener bekommt die richtige Position, gibt aber falsche Daten weiter

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; 
    } 
} 

Antwort

0

So war ich endlich in der Lage, dies zu erhalten zu arbeiten. Ich habe die Position vor dem setOnClickListener falsch gesetzt und es im onClick falsch bekommen. Ich hatte zwei Linien

Original-Codezeile zu ändern:

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

geändert:

final int position = cursor.getPosition(); 

vor dem setOnClickListener und dann innerhalb der onClick Methode hatte

Original-Linie zu ändern Code:

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

geändert:

cursor.moveToPosition(position); 
0

Sie dies versuchen können,

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

würde ich cursor.getPostion(); am Anfang der BindView oder in der OnClickListener? Ich habe ein wenig Schwierigkeiten, genau zu verstehen, wo ich die Position herbekomme. –

+0

hast du Titel für Spalten? –

+0

Ja, ich habe die textViews mit dem Cursor.getString (cursor.getColumnIndexOrThrow ("Column_name)) verbunden; in meinem CursorAdapter für jede Spalte, die ich in der obigen Frage übergeben möchte. Ich bin nur nicht sicher, wie die genaue Position von übergeben Klicken Sie, um das an eine andere Aktivität zu übergeben, um ein neues Layout zu erstellen. –

Verwandte Themen