要在RecyclerView的EditText中保留焦点并继续输入,你可以尝试以下解决方法:
public class MyAdapter extends RecyclerView.Adapter {
private List mData;
public MyAdapter(List data) {
mData = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.mEditText.setText(mData.get(position));
holder.mEditText.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) {
mData.set(holder.getAdapterPosition(), s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public int getItemCount() {
return mData.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public EditText mEditText;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mEditText = itemView.findViewById(R.id.editText);
}
}
}
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private MyAdapter mAdapter;
private LinearLayoutManager mLayoutManager;
private int mFocusedItemPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recyclerView);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
List data = new ArrayList<>();
// 添加一些初始数据
for (int i = 0; i < 10; i++) {
data.add("");
}
mAdapter = new MyAdapter(data);
mRecyclerView.setAdapter(mAdapter);
}
@Override
protected void onPause() {
super.onPause();
// 保存焦点的位置
mFocusedItemPosition = mLayoutManager.findFirstVisibleItemPosition();
}
@Override
protected void onResume() {
super.onResume();
// 恢复焦点的位置
mLayoutManager.scrollToPosition(mFocusedItemPosition);
}
}
这样,当你在EditText中输入内容时,RecyclerView会自动更新数据集,并在Activity或Fragment的生命周期方法中保存和恢复焦点位置。
上一篇:Android - Realm: 对象不再有效,不能进行操作。它是否被另一个线程删除了?
下一篇:Android - RecyclerView StaggeredGridLayoutManager 最后一行宽度拉伸