RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1563580
Accepted
Mixadyt
Mixadyt
Asked:2024-01-28 03:44:18 +0000 UTC2024-01-28 03:44:18 +0000 UTC 2024-01-28 03:44:18 +0000 UTC

如何从recyclerView中的editText获取文本?

  • 772

我有一个 ID 为 widgetCount 的 editText,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/newRoomLinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/widgetName"
        android:gravity="center"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="5"
        android:fontFamily="@font/montserrat_bold"
        android:textSize="25sp"
        android:text="@string/app_name" />

    <EditText
        android:id="@+id/widgetCount"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_gravity="end"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:gravity="center"
        android:autofillHints="name"
        android:text="@string/count_default"
        android:hint="@string/count_hint"
        android:inputType="number" />
</LinearLayout>

这是插入到回收器视图中的块。问题本身:如何从 edittext 获取文本?

回调不适合我。我尝试了一下,因为每个人都说英语。堆栈溢出版本:

for (int i = 0; i < newRoomRecycler.getAdapter().getItemCount();i++) {
    View view = newRoomRecycler.getChildAt(i);
    EditText widgetCount = view.findViewById(R.id.widgetCount);
}

但是,第 2 行有错误:

attempt to invoke virtual method 'android.view.View android.view.View.findViewByid(int)' on a null object reference

适配器:

public class NewRoomAdapter extends RecyclerView.Adapter<NewRoomAdapter.NewRoomViewHolder> {

    private final Context context;
    private final List<NewRoom> newRooms;

    public NewRoomAdapter(Context context, List<NewRoom> newRooms) {
        this.context = context;
        this.newRooms = newRooms;
    }

    @NonNull
    @Override
    public NewRoomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View newRoomItems = LayoutInflater.from(context).inflate(R.layout.new_room_block, parent, false);
        return new NewRoomViewHolder(newRoomItems);
    }

    @Override
    public void onBindViewHolder(@NonNull NewRoomViewHolder holder, @SuppressLint("RecyclerView") int position) {
        holder.newRoomText.setText(newRooms.get(position).getText());
    }

    @Override
    public int getItemCount() {
        return newRooms.size();
    }

    public static final class NewRoomViewHolder extends RecyclerView.ViewHolder {

        private final TextView newRoomText;

        public NewRoomViewHolder(@NonNull View itemView) {
            super(itemView);

            newRoomText = itemView.findViewById(R.id.widgetName);
        }
    }

}

这是适配器传递到回收器视图的方式:

private void setNewRoomRecycler(List<NewRoom> newRoomList) {
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);

        newRoomRecycler = findViewById(R.id.newRoomRecycler);
        newRoomRecycler.setLayoutManager(layoutManager);

        newRoomAdapter = new NewRoomAdapter(this, newRoomList);
        newRoomRecycler.setAdapter(newRoomAdapter);
    }

我读到了有关该错误的信息,在解决方案中他们说该对象根本不存在。

请帮帮我!

java
  • 1 1 个回答
  • 27 Views

1 个回答

  • Voted
  1. Best Answer
    Mixadyt
    2024-01-29T00:35:31Z2024-01-29T00:35:31Z

    我使用了回调并将其保存到哈希表中:

    public class NewRoomAdapter extends RecyclerView.Adapter<NewRoomAdapter.NewRoomViewHolder> {
    
        private final Context context;
        private final List<NewRoom> newRooms;
        public HashMap<String, Integer> widgets = new HashMap<>();
    
        public NewRoomAdapter(Context context, List<NewRoom> newRooms) {
            this.context = context;
            this.newRooms = newRooms;
    
            for (int i = 1; i <= 10; i++) {
                widgets.put("widget" + i, 0);
            }
        }
    
        @NonNull
        @Override
        public NewRoomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View newRoomItems = LayoutInflater.from(context).inflate(R.layout.new_room_block, parent, false);
            return new NewRoomViewHolder(newRoomItems);
        }
    
        @Override
        public void onBindViewHolder(@NonNull NewRoomViewHolder holder, @SuppressLint("RecyclerView") int position) {
            holder.newRoomText.setText(newRooms.get(position).getText());
            holder.newRoomCount.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    onEditTextChanged(position, s.toString());
                }
    
                @Override
                public void afterTextChanged(Editable s) {
    
                }
            });
        }
    
        @Override
        public int getItemCount() {
            return newRooms.size();
        }
    
        public static final class NewRoomViewHolder extends RecyclerView.ViewHolder {
    
            private final TextView newRoomText;
            private final EditText newRoomCount;
    
            public NewRoomViewHolder(@NonNull View itemView) {
                super(itemView);
    
                newRoomText = itemView.findViewById(R.id.widgetName);
                newRoomCount = itemView.findViewById(R.id.widgetCount);
            }
        }
    
        public void onEditTextChanged(int position, String charSeq) {
            if (!Objects.equals(charSeq, "")) {
                widgets.put("widget" + (position + 1), Integer.parseInt(charSeq));
            }
        }
    }
    

    添加了 HashMap 初始化:

    public HashMap<String, Integer> widgets = new HashMap<>();
    

    和

    public NewRoomAdapter(Context context, List<NewRoom> newRooms) {
        this.context = context;
        this.newRooms = newRooms;
    
        for (int i = 1; i <= 10; i++) {
            widgets.put("widget" + i, 0);
        }
    }
    

    还添加了一个函数来检查文本是否已更改:

    holder.newRoomCount.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    onEditTextChanged(position, s.toString());
                }
    
                @Override
                public void afterTextChanged(Editable s) {
    
                }
            });
    

    和

    public void onEditTextChanged(int position, String charSeq) {
            if (!Objects.equals(charSeq, "")) {
                widgets.put("widget" + (position + 1), Integer.parseInt(charSeq));
            }
        }
    
    • 0

相关问题

  • wpcap 找不到指定的模块

  • 如何以编程方式从桌面应用程序打开 HTML 页面?

  • Android Studio 中的 R.java 文件在哪里?

  • HashMap 初始化

  • 如何使用 lambda 表达式通过增加与原点的距离来对点进行排序?

  • 最大化窗口时如何调整元素大小?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5