我知道这个问题的标题完全相同,但是没有提供一个体面的解决方案,因此是“重复”。
在将新项目添加到recyclerView时,我想将焦点设置为最新项目(这是EditText的列表)。但是,由于重新计算视图,因此调用“ findViewHolderForAdapterPosition”将返回null。可以通过在调用如下所示的函数之前等待半秒钟来解决此问题
addOptionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
optionsAdapter.addOption();
optionsRecyclerView.postDelayed(new Runnable() {
@Override
public void run() {
int last = optionsAdapter.getItemCount()-1;
OptionsAdapter.OptionViewHolder o = (OptionsAdapter.OptionViewHolder) optionsRecyclerView.findViewHolderForAdapterPosition(last);
o.editText.setSelected(true);
}
},500);
}
});
//OptionsAdapter class
public void addOption()
{
values.add("");
notifyItemInserted(values.size()-1);
}
但是,它不是最整洁的方法,也不总是有效。也许有更好的解决方法?
答案 0 :(得分:0)
另一个想法:
addOptionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
optionsAdapter.addOption();
int last = optionsAdapter.getItemCount()-1;
optionsRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
int lastVisible = layoutManager.findLastVisibleItemPosition();
if (lastVisible == last) {
optionsRecyclerView.removeOnScrollListener(this);
OptionsAdapter.OptionViewHolder o = (OptionsAdapter.OptionViewHolder) optionsRecyclerView.findViewHolderForAdapterPosition(last);
o.editText.setSelected(true);
}
}
optionsRecyclerView.scrollToPosition(last);
}
});
尝试一下:
addOptionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
optionsAdapter.addOption();
int last = optionsAdapter.getItemCount()-1;
optionsRecyclerView.scrollToPosition(last);
OptionsAdapter.OptionViewHolder o = (OptionsAdapter.OptionViewHolder) optionsRecyclerView.findViewHolderForAdapterPosition(last);
o.editText.setSelected(true);
}
});