【问题标题】:Retrieve multiple edit text per row from RecyclerView从 RecyclerView 每行检索多个编辑文本
【发布时间】:2015-10-09 17:39:30
【问题描述】:

我已通读 this linkthis one 但他们谈到从 recyclerview 每行获取一个编辑文本,但在我的情况下,我想在 recyclerview 中每行添加 3 个编辑文本,然后从这些中提取所有字符串单击回收站视图外的按钮时编辑文本。

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

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

谁能帮我解决这个问题。

【问题讨论】:

    标签: android android-edittext android-recyclerview


    【解决方案1】:

    在您的 RecyclerView.Adapter 子类中,我们将其称为 customRAdapter,在您重写的 OnCreateViewHolder 方法中膨胀一个布局,该方法在垂直方向的 LinearLayout 中包含三个 EditText。接下来,向 customRAdapter 类添加一个公共方法,该方法返回一个字符串数组,其中包含三个 EditText 中的文本。从 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中的原理和几乎所有代码都差不多。

    【讨论】:

    • 我不明白有关公共 EditText et1 {} 的代码。我到底应该把它放在哪里?得到了什么;私有集应该怎么做?
    • @VarunAgarwal 它允许您在 RecyclerView.Adapter 子类中引用您的 EditTexts。您需要这些引用,以便在单击按钮时从 EditTexts 中获取字符串值。
    • 我回家后会试试这个。如果我遇到任何问题会发布。谢谢。只是一个疑问, getEditTestString() 正在返回一组编辑文本。我不需要遍历所有现有行来收集数据吗?
    • @VarunAgarwal 也许您可以更好地解释您要做什么。欢迎您给我留言,我会尽力提供帮助。但是,是的,您需要遍历所有这些。我不清楚你想要什么。
    • 我的最终目标是我的收银员将输入所购买商品的名称、数量和订单价格。现在每个订单购买的商品数量都会不断变化,因此应该有一个选项可以向 recyclerview 添加更多“行”。所以我需要创建一种可以输入数据的排序形式,然后我可以提取所有数据并保存它,当点击recyclerview之外的按钮时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多