从RecyclerView

时间:2015-10-09 17:39:31

标签: android android-edittext android-recyclerview

我已阅读this linkthis one,但他们谈到从Recyclerview获取每行一个编辑文本,但在我的情况下,我想在recyclerview中每行添加3个编辑文本,然后全部提取单击recyclelerview外部的按钮时,这些编辑文本中的字符串。

recyclerview的布局将是这样的。每个都是一个编辑文本,用户将在其中输入项目的名称,数量和价格。

________________________________________________________-
|__Name__________|___Number________|____Price___________|+|
________________________________________________________-
|__Name__________|___Number________|____Price___________|+|
________________________________________________________-
|__Name__________|___Number________|____Price___________|+|

有人可以帮我解决这个问题。

1 个答案:

答案 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中的原理和几乎所有代码大致相同。