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);
}
}
}
}
工作(组简单的数据):
不工作(RX):
个感谢, 罗伯特