2016-03-11 2 views
0

интересный сценарий: мне нужно, чтобы однозначно идентифицировать View (EditText быть точным) в RecyclerView, который имеет CardView с.Уникально, идентифицирующие отдельные виды в CardView-RecyclerView

У меня есть RecyclerView с переменным числом из CardView с. Каждый CardView имеет EditText (R.id.etCodeBox). Когда пользователь прокручивает RecyclerView и вводит что-то в EditText по своему выбору и нажимает Button, я читаю значение R.id.etCodeBox и всегда возвращает пустое значение (""). Только на firstCardView, я могу правильно прочитать введенное значение.

Соответствующий фрагмент кода

public boolean verifyCode(Context context, View rootView, int dID, int drID, int userCount) 
{ 
    EditText codeBox = (EditText) rootView.findViewById(R.id.etCodeBox); 

    String enteredCode = codeBox.getText().toString(); 
    long nowInMillis = Calendar.getInstance().getTimeInMillis(); 

    TextView tvDCount, tvDDate; 
    tvDCount = (TextView) rootView.findViewById(R.id.tvDCount); 
    tvDDate = (TextView) rootView.findViewById(R.id.tvDDate); 
    codeBox.setText(""); 
    if (enteredCode.equals(String.valueOf(dID))) 
    { 
      : 
      : 

Соответствующие Компоновка сниппет

 <android.support.v7.widget.CardView 
     android:id="@+id/cvDBack" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     card_view:cardBackgroundColor="@color/commonMainListsBackground" 
     card_view:cardCornerRadius="10dp" 
     card_view:cardElevation="12dp" 
     card_view:contentPadding="2dp"> 

       : 
       : 
       : 

       <EditText 
        android:id="@+id/etCodeBox" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:alpha="0.5" 
        android:hint="Code" 
        android:inputType="numberPassword|none" 
        android:focusable="true"/> 

       <Button 
        android:id="@+id/btClaim" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_below="@+id/etCodeBox" 
        android:text="Claim!"/> 
       : 
       : 
       : 

Итак, как я могу прочитать правильное значение из EditText независимо от позиции CardView «s? Другими словами, как я могу однозначно указать «выбранный» или «сфокусированный» CardViewR.id.etCodeBox?

+1

набор тегов к виду, конечно, Что сложного об этом? – Bhargav

+0

Как вы имеете в виду @Bhargav? Установка тега 'EditText' в' onBind' проста, но как я могу прочитать «EditText» определенного «CardView» с помощью 'findViewById()' на основе тега, а затем получить введенное значение? Быстрый фрагмент, может быть, как ответ, поэтому его можно принять? Если это слишком просто, пожалуйста, помогите мне, ответив на этот комментарий. –

+0

Вы используете зрители да? у вас уже есть ссылка на edittext, вам не нужно делать этот дорогой метод findViewById каждый раз, когда вы хотите получить ссылку на «EditText» – Bhargav

ответ

1

Вам нужно определить метод в классе viewholder как

public String getEtCodeBoxText() { 
    return etCodeBox.getText().toString(); 
} 

Но прежде чем сделать это, Вы должны содержать ссылку на этот редактировать текст в классе viewHolder

public static class MyVIewHolder extends RecyclerView.ViewHolder { 
    public final EditText etCodeBox; 
    public final View view; 

    public VIewHolder(View view) { 
     super(view); 
     etCodeBox = (EditText) view.findViewById(R.id.etCodeBox); 
    } 
} 

Теперь вместо фактически получить представление и сделать findViewById для вашего EditText, вы просто получите ссылку на viewHolder из recyclerView, используя множество функций, предоставляемых recyclerviews (findViewHolderByPosition и т. д.), затем вызовите функцию getEtCodeBoxText, и вы ульд быть хорошим

Так что для завершения цели я поместить здесь ViewHolder код класса

public static class MyVIewHolder extends RecyclerView.ViewHolder { 
    public final EditText etCodeBox; 
    public final View view; 

    public VIewHolder(View view) { 
     super(view); 
     etCodeBox = (EditText) view.findViewById(R.id.etCodeBox); 
    } 
    public String getEtCodeBoxText() { 
     return etCodeBox.getText().toString(); 
    } 

} 
+0

большое спасибо за ваш ответ. Тем не менее, ваш первоначальный комментарий по пометке 'EditText' был достаточно понятен. В сочетании с методом 'getAdapterPosition()' ViewCardHolder' я смог создать много уникальных тегов для других представлений. Чтение назад было также простым, с методом 'findViewWithTag()'. У меня не было необходимости опробовать ваш ответ, поэтому я оставил его непринятым. Еще раз спасибо за помощь, очень ценю. –