Android - 如何从MainActivity中的RecyclerView检索EditText值

Hal*_*cht 4 android android-edittext android-recyclerview

如何从MainActivity中的RecyclerView创建的所有EditTexts中检索值?

在我的RecyclerView适配器中,我正在扩展我的内部类:

public class MyPersonalAdapter extends RecyclerView.Adapter<MyPersonalAdapter.MyPersonalViewHolder>
Run Code Online (Sandbox Code Playgroud)

我在该内部类中获得了对EditText的引用:

 class MyPersonalViewHolder extends RecyclerView.ViewHolder {

        TextView numberTextView;
        EditText nameEditText;

        public MyPersonalViewHolder(View itemView) {
            super(itemView);
            numberTextView = (TextView) itemView.findViewById(R.id.tv_number);
            nameEditText = (EditText) itemView.findViewById(R.id.et_name);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我想要使用的MainActivity中:

for (int i = 0; i < count; i++) {
    String name = "Somehow get that name";
    cv.put(MyContract.MyEntry.COLUMN_NAME, "name");
}
Run Code Online (Sandbox Code Playgroud)

Raj*_*ram 11

搞定了,这是编辑过的代码:

mAdapter = new MyClassAdapter(this, mDataset.size);
mRecyclerView.setAdapter(mAdapter);
mRecyclerview.setItemViewCacheSize(mDataset.size());

List<ContentValues> list = new ArrayList<>();

for (int i = 0; i < mDataset.size(); i++) {
    View view = recyclerView.getChildAt(i);
    EditText nameEditText = (EditText) view.findViewById(R.id.et_name);
    String name = nameEditText.getText().toString();

    ContentValues cv = new ContentValues();
    cv.put(MyContract.MyEntry.COLUMN_NAME, name);
    list.add(cv)
}

// I encapsulated this in a try catch
for (ContentValues c:list) {
    mDb.insert(MyClassContract.MyClassEntry.TABLE_NAME, null, c);
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这段代码有效。但它仅适用于ListView。因为如果系统回收视图,则应用程序将崩溃,并给出空指针。因此,只要所有EditTexts都适合屏幕,此方法就起作用。 (2认同)
  • 正如 @Halfacht 所建议的,此解决方案不适用于 recyclerview,因为视图被回收,并且当我们尝试调用 recyclerview.getChildAt(i); 时会出现空指针异常。 (2认同)