簡體   English   中英

findViewHolderForAdapterPosition() 返回 null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM