2

设置适配器的数据当我设置适配器的数据直接,则列表的滚动位置是正确的我来自产品详情片段回来后,但如果我使用RXAndroid来处理数据,然后滚动总是跳到顶部。 这里是我的问题的例子:RecyclerView滚动到后退导航后顶部如果通过RxAndroid

public class ListFragment extends Fragment { 

private MyAdapter adapter; 
private List<String> data = new ArrayList<>(); 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    for (int i = 1; i < 30; i++) { 
     data.add("POS: " + i); 
    } 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View root = inflater.inflate(R.layout.fragment_list, container, false); 
    adapter = new MyAdapter(); 
    ((RecyclerView) root.findViewById(R.id.bone_list)).setAdapter(adapter); 
    return root; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    data.add("POS: " + (data.size() + 1)); 

    // Working 
    //adapter.setData(data); 

    // Not working 
    Observable.just(data) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Consumer<List<String>>() { 
       @Override 
       public void accept(List<String> strings) throws Exception { 
        adapter.setData(strings); 
       } 
      }); 
} 

class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    private List<String> values = new ArrayList<>(); 

    public void setData(List<String> items) { 
     values = items; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_content, parent, false)); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) { 
     holder.content.setText(values.get(position)); 
     holder.root.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getFragmentManager().beginTransaction() 
         .replace(R.id.container, Fragment.instantiate(getContext(), DetialFragment.class.getName())) 
         .addToBackStack(null) 
         .commit(); 
      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return values.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     final View root; 
     final TextView content; 

     ViewHolder(View view) { 
      super(view); 
      root = view; 
      content = (TextView) view.findViewById(R.id.content); 
     } 
    } 
} 

}

工作(组简单的数据):

enter image description here

不工作(RX):

enter image description here

感谢, 罗伯特

回答

0

我可能会迟到,但得到了同样的问题。

自动RecyclerView(与ID的任何视图中)保存状态,但第一布局通之前,应提供一个数据。

所以同步adapter.setData(data)的作品,但异步Rx操作没有。

您可以缓存数据和设置同步或直接保存在您的accept功能设定位置。

相关问题