Android 调用notifyItemChanged()时调用RecyclerView.Adapter onCreateViewHolder

Android 调用notifyItemChanged()时调用RecyclerView.Adapter onCreateViewHolder,android,android-recyclerview,Android,Android Recyclerview,我有一个简单的适配器,它看起来就像这样: 除此之外,数据项比字符串复杂得多 public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.TopicContentViewHolder> { private final Context mContext; private List<ModelTopic> mData; public void add(ModelTopi

我有一个简单的适配器,它看起来就像这样:

除此之外,数据项比字符串复杂得多

public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.TopicContentViewHolder> {

    private final Context mContext;
    private List<ModelTopic> mData;

    public void add(ModelTopic s,int position) {
        position = position == -1 ? getItemCount()  : position;
        mData.add(position, s);
        notifyItemInserted(position);
    }

    public void updateNightMode(boolean isNightMode) {
        if (mData.size() > 0) {
            mData.get(0).setNightMode(isNightMode);
            notifyItemChanged(0);
        }
    }

    static class TopicContentViewHolder extends RecyclerView.ViewHolder {

        @BindView(R.id.view_pager)
        FixedAspectRatioViewPager viewPager;
        @BindView(R.id.circlePageIndicator)
        CirclePageIndicator circlePageIndicator;

        @BindView(R.id.wv_details_text)
        WebView wvDetailsText;

    }

    @Override
    public void onBindViewHolder(TopicContentViewHolder vh, final int position) {
        Log.d("SimpleAdapter", "BindViewHolder");
        ModelTopic topic =  mData.get(position);

        final int curTextColor = NightModeFragment.getCurrentTextColor(mContext, topic.isNightMode());
        vh.detailsHeaderText.setTextColor(curTextColor);
但我有意外的滚动。 我想这是因为调用notifyItemChanged时调用了我的方法onCreateViewHolder

以下是我的日志输出:

05-19 17:15:38.620 27303-27303 D/SimpleAdapter: createViewHolder
05-19 17:15:38.640 27303-27303 D/SimpleAdapter: BindViewHolder
//all above called when I enter fragment and adapter is created

05-19 17:15:48.535 27303-27303 D/SimpleAdapter: createViewHolder
05-19 17:15:48.555 27303-27303 D/SimpleAdapter: BindViewHolder
//above called when I change notifyItemChanged() first time

05-19 17:15:50.447 27303-27303 D/SimpleAdapter: BindViewHolder
//above called when I change notifyItemChanged() 2 time

05-19 17:15:52.910 27303-27303 D/SimpleAdapter: BindViewHolder
//above called when I change notifyItemChanged() 3 time

05-19 17:15:53.183 27303-27303 D/SimpleAdapter: BindViewHolder
//above called when I change notifyItemChanged() 4 time
如您所见,onCreateViewHolder调用了两次。第一次是显而易见的,但第二次对我来说是个谜。
这里有什么帮助吗?

似乎意外的滚动最终是您要解决的问题,您能否更准确地描述您看到的内容,以便我们了解问题?当我调用notifyItemChanged()时,我看到我的列表一直滚动到开头。下次调用notifyItemChanged()时,它将保持静止。3时间-保持静止。看看日志输出。
05-19 17:15:38.620 27303-27303 D/SimpleAdapter: createViewHolder
05-19 17:15:38.640 27303-27303 D/SimpleAdapter: BindViewHolder
//all above called when I enter fragment and adapter is created

05-19 17:15:48.535 27303-27303 D/SimpleAdapter: createViewHolder
05-19 17:15:48.555 27303-27303 D/SimpleAdapter: BindViewHolder
//above called when I change notifyItemChanged() first time

05-19 17:15:50.447 27303-27303 D/SimpleAdapter: BindViewHolder
//above called when I change notifyItemChanged() 2 time

05-19 17:15:52.910 27303-27303 D/SimpleAdapter: BindViewHolder
//above called when I change notifyItemChanged() 3 time

05-19 17:15:53.183 27303-27303 D/SimpleAdapter: BindViewHolder
//above called when I change notifyItemChanged() 4 time