如何在运行时填充阵列列表中使用不同数量的EditText对象



这是我第一次使用recyclerview,而我从Android指南中查看的示例代码会创建一个静态的嵌套类视图持有人。首先,我不是积极的观点持有人的目的。您可以在这里查看他们如何做到https://developer.android.com/guide/topics/ui/layout/recyclerview

我正在制作一个抽认卡应用程序,该应用程序允许每个项(例如多维抽认卡(进行多个定义。我的应用程序允许用户添加尽可能多的EditTexts,因此我认为处理此操作的最佳方法是在View Holder中制作EditTexts的阵列列表。但是,我不知道如何正确填充阵列列表。我调用新的EditText时会收到错误消息。

dedittext(android.content.context(无法应用EditText中的到(com.example.flashcards.inputadapter.inputviewholder(

另外,我将类非静态而不是静态制作,因为它必须访问适配器的ArrayList的实例才能知道要制作多少个iDittext。我希望这不会引起任何问题,因为我看到的所有示例代码使此类静态。

公共类inputAdapter扩展了recyclerview.adapter { 私人Arraylist alldata;//数据是我制作的类,它扩展了ArrayList。它存储

public InputAdapter(ArrayList<Data> input){
    allData = input;
}
public class InputViewHolder extends RecyclerView.ViewHolder { 
    public ArrayList<EditText> inputs; 
    public InputViewHolder(View itemView){
        super(itemView);
        for (int i = 0; i < allData.get(0).size(); i++){
            inputs.add(new EditText(this));  //where I get the error message
        }
    }
}

感谢您的帮助。向那些解释为什么做自己做的事情以及我做错了什么的人额外感谢。

首先,我不是积极的观点持有人的目的。

ViewHolder存在解决两个问题:

  1. 膨胀的视图非常慢
  2. 呼叫findViewById()有点慢

recyclerview使您与onBindViewHolder()分别实现onCreateViewHolder(),以便它可以决定何时需要夸大新视图,并解决第1期。ViewHolder的约定说您应仅在视图持有人的构造函数中调用findViewById()(然后通过holder.myView访问您的视图(,解决问题#2。

我打电话给新的Edittext时会收到错误消息。

EditText (android.content.Context) in EditText cannot be applied to(com.example.flashcards.InputAdapter.InputViewHolder)  

示例通常会显示,例如new EditText(this),但这仅起作用,因为代码在Activity的内部运行。所有活动均为Context S,构造函数需要Context

在视图持有人内部,您可以从itemView获得Context。因此,请写下:

new EditText(itemView.getContext())

另外,我将类非静态而不是静态制作,因为它必须访问适配器的ArrayList的实例才能知道要制作多少个iDittext。我希望这不会引起任何问题

不需要ViewHolder类是静态的。通常建议它们是静态的,以避免可能的性能问题(内存泄漏等(,但是如果它对您有用,则没有任何本质上的错误。

相关内容

最新更新