一个有趣的场景:我需要在具有View
s的EditText
中唯一标识RecyclerView
(CardView
准确)。
我有一个RecyclerView
,其{strong> 变量号 为CardView
s。每个CardView
都有EditText
(R.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}}?
答案 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();
}
}