我知道这个问题已经被问到了完全相同的标题,但没有提供一个像样的解决方案,因此我提出了“复制品”。
在向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);
}
然而,它不是最整洁的方法,也不总是有效的。有没有更好的办法绕过它呢?
发布于 2018-09-17 01:40:45
编辑:
另一个想法是:
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);
}
});
https://stackoverflow.com/questions/52355393
复制相似问题