[英]findViewHolderForAdapterPosition() returns null
我知道這個問題已經被問到了完全相同的標題,但沒有提供一個像樣的解決方案,因此我的“重復”。
在向 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);
}
然而,這不是最簡潔的方法,也不是總能奏效。 也許有更好的方法來解決它?
另一個想法:
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);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.