【问题标题】:How to stop screen scrolling up while updating data in RecyclerViewAdapter?如何在 RecyclerView 适配器中更新数据时停止屏幕向上滚动?
【发布时间】:2016-09-09 09:32:53
【问题描述】:

我有 RecyclerView 和一些视图。它们每秒钟都在实现。问题是,屏幕每秒都在向上滚动(刷新),而用户正在向下滚动。数据更新后如何使其保持位置? 这是我的代码:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView = (RecyclerView)findViewById(R.id.mainRecyclerView);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    initializeData();
    adapter = new RecyclerViewAdapter(offers);
    startCount();

}
private void startCount(){
    final Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            updateData();
            handler.postDelayed(this, 1000);

        }
    };
    handler.postDelayed(runnable, 1000);


}
private void initializeData(){
    offers = new ArrayList<>();
    seconds = new ArrayList<>();
    seconds.add(600);
    seconds.add(10);
    seconds.add(20);
    offers.add(new Offer(seconds.get(0), R.drawable.zdj, 200));
    offers.add(new Offer(seconds.get(1), R.drawable.zdj));
    offers.add(new Offer(seconds.get(2), R.drawable.zdj));

}


private void updateData(){
    int i = 0;
    int tempSec;
    for(int j = 0; j < seconds.size();j++){

        tempSec = seconds.get(j);
        if(tempSec==0){
            offers.remove(j);
            seconds.remove(j);
            break;
        }
        tempSec--;
        seconds.set(j, tempSec);
        offers.set(j, new Offer(seconds.get(j), R.drawable.zdj));
    }
    initializeAdapter();
}
private void initializeAdapter() {

    adapter.notifyItemChanged(offers.size());
    recyclerView.setAdapter(adapter);
}

【问题讨论】:

  • 如果你可以玩线程,为什么你想停止滚动,应用一个并行线程,它的主线程用于在回收器视图中加载数据。

标签: android scroll android-recyclerview


【解决方案1】:

您必须更新 RecyclerView 的特定行。请根据您的要求使用以下任一覆盖方法,

notifyItemChanged(int position, Object payload)

notifyItemChanged(int position)

您还可以设置要显示的特定位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多