2017-08-29 7 views
1

データリストを非同期的にロードして、RecyclerView上に断片的に表示しようとしています。ただし、同じ実装がアクティビティクラスでは機能しますが、フラグメントでは失敗します。フラグメント内のRecyclerViewで非同期に取得されるデータの表示

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; 
} 
} 

どのような提案も高く評価されます。

答えて

0

onCreateではなくonCreateView()でアダプタを設定しようとします。データ

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

ため チェックは、データをフェッチした後、これらの2行はonCreateView使用してください。

+0

私のリストはhandleCheckInInfoResponse()メソッドで更新されていますが、既にそこに行が追加されています。私はプログラムを編集しました。もう一度見てください。 – Salam

関連する問題