显示在Fragment中的RecyclerView中异步获取的数据

时间:2017-08-29 20:08:06

标签: android android-fragments

我正在尝试异步加载数据列表并在片段中显示在RecyclerView上。但是,相同的实现适用于Activity类,但对Fragment失败:

public class ItemThreeFragment extends Fragment {

String email;
private CompositeSubscription mSubscriptions;
HistoryAdapter historyAdapter;
RecyclerView recyclerView;


public static ItemThreeFragment newInstance() {
    ItemThreeFragment fragment = new ItemThreeFragment();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    email = ((BaseApplication) getActivity().getApplication()).getEmail();
    mSubscriptions = new CompositeSubscription();
    getUserHistory(email);

}

private void getUserHistory(String email) {
    mSubscriptions.add(NetworkUtil.generic().getUserCheckinInfo(email)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(this::handleCheckInInfoResponse,this::handleError));

}

private void handleCheckInInfoResponse(List<Checkin> checkins) {
    System.out.println(checkins);
    historyAdapter = new HistoryAdapter(this.getActivity(), checkins);
    recyclerView.setAdapter(historyAdapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

}

private void handleError(Throwable throwable) {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_item_three, container, false);
    recyclerView = (RecyclerView) rootView.findViewById(R.id.historyList);


    return rootView;
}
}

任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

尝试在onCreateView()而不是onCreate中设置适配器。 检查数据

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(historyAdapter);

在获取数据后,在onCreateView上使用这两行。