我已阅读this link和this one,但他们谈到从Recyclerview获取每行一个编辑文本,但在我的情况下,我想在recyclerview中每行添加3个编辑文本,然后全部提取单击recyclelerview外部的按钮时,这些编辑文本中的字符串。
recyclerview的布局将是这样的。每个都是一个编辑文本,用户将在其中输入项目的名称,数量和价格。
________________________________________________________-
|__Name__________|___Number________|____Price___________|+|
________________________________________________________-
|__Name__________|___Number________|____Price___________|+|
________________________________________________________-
|__Name__________|___Number________|____Price___________|+|
有人可以帮我解决这个问题。
答案 0 :(得分:1)
在您的RecyclerView.Adapter子类中,我们将其称为customRAdapter,在覆盖的OnCreateViewHolder方法中展开布局,该方法在垂直方向的LinearLayout中包含三个EditTexts。接下来,向customRAdapter类添加一个公共方法,该类返回包含三个EditTexts中文本的字符串数组。从RecyclerView外部单击按钮时,引用customRAdapter实例的方法,该方法返回字符串数组并解决您的问题。
要在重写的OnCreateViewHolder方法(LAYOUT_NAME.axml)中夸大您的XML布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/holo_blue_dark"
android:id="@+id/main_framelayout">
<EditText
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/EditText1"
/>
<EditText
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/EditText2"
/>
<EditText
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/EditText3"
/>
</LinearLayout>
重写的OnCreateViewHolder方法本身:
public override RecyclerView.ViewHolder OnCreateViewHolder (ViewGroup parent, int viewType)
{
layoutinflater = LayoutInflater.From (context);
view = layoutinflater.Inflate (Resource.Layout.LAYOUT_NAME, parent, false);
return new customRecyclerHolder (view);
}
在RecyclerView.ViewHolder子类中有以下内容:
public EditText et1 {
get;
private set;
}
public EditText et2 {
get;
private set;
}
public EditText et3 {
get;
private set;
}
public customRecyclerHolder(View view):base(view){
et1 = view.FindViewById<EditText>(Resource.Id.EditText1);
et2 = view.FindViewById<EditText>(Resource.Id.EditText2);
et3 = view.FindViewById<EditText>(Resource.Id.EditText3);
}
获取字符串数组的示例(在customRAdapter类中):
customViewHolder holder;
public override void OnBindViewHolder (RecyclerView.ViewHolder holder, int position)
{
....
this.holder = holder as customViewHolder; //get the reference to the current viewholder
}
//call this method from your button code to retrieve the strings.
public string[] getEditTextStrings(){
return new string[]{ holder.et1.Text, holder.et2.Text, holder.et3.Text };
}
仅供参考,这一切都在C#中。 Java中的原理和几乎所有代码大致相同。