在CardView-RecyclerView中唯一标识各个视图

时间:2016-03-11 18:01:27

标签: android-recyclerview android-cardview

一个有趣的场景:我需要在具有View s的EditText中唯一标识RecyclerViewCardView准确)。

我有一个RecyclerView,其{strong> 变量号CardView s。每个CardView都有EditTextR.id.etCodeBox)。当用户滚动RecyclerView并在其选择的EditText中输入内容并点击Button时,我会读取R.id.etCodeBox的值,并且它始终返回空值( “”)。只有在 第一个 CardView上,我才能正确回读输入的值。

相关代码段

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中读取正确的值?换句话说,我如何唯一地指向“已选定”或“专注”CardView的{​​{1}}?

1 个答案:

答案 0 :(得分:1)

您需要在视图类中定义一个方法,如

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

现在不是实际获取视图并为EditText执行findViewById,而是使用recyclelerviews(findViewHolderByPosition等)提供的许多函数从recyclerView获取对viewHolder的引用,然后调用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();
    }

}