2017-05-15 11 views
1

私はこのArrayAdapterをしましたアレイは

正しいですサービスが良いかどうかを知るためのログ。 問題は、アダプタ内の項目を示すログが常に0であることです。 なぜですか? どこでアダプタを更新できますか?

おかげ

EDIT:これは、モデル、ビューとプレゼンターです:

public class APIModel implements AddWithText.Model { 

@Inject 
Retrofit retrofit; 

AddWithText.Presenter presenter; 

public APIModel(AddWithText.Presenter presenter) { 
    this.presenter = presenter; 
} 

final List<String> resultList = new ArrayList<>(); 

void addToList(Places places){ 
    places.getPredictions().stream().forEach(s->System.out.println(s.getDescription())); 

    places.getPredictions() 
      .stream() 
      .map(s->resultList.add(s.getDescription())); 
} 

@Override 
public List<String> loadPlaces(String input) { 

    HappyParkApp.getInstance().createAppComponent().inject(this); 

    PlaceAPIService service = retrofit.create(PlaceAPIService.class); 

    Flowable<Places> places = service.getPlaces(Constants.APIKEY,Constants.TYPES,Constants.LANGUAGE,Constants.COMPONENTS,input); 

    places.subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(newPlace -> addToList(newPlace)); 

    return resultList; 
} 

}

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_add_with_text, container, false); 

    ButterKnife.bind(this,rootView); 
    HappyParkApp.getInstance().createAppComponent().inject(this); 

    presenter = new AddWithTextPresenter(); 

    adapter = new PlacesAutoCompleteAdapter(getActivity(),R.layout.list_item,autoComplete,this); 
    DatabaseReference root = FirebaseDatabase.getInstance().getReference(); 
    final DatabaseReference condition = root.child("condition"); 

    insertText.setAdapter(adapter); 


return rootView; 
} 


@Override 
public void onResume() { 
    super.onResume(); 
    presenter.setView(this); 
} 

@Override 
public List<String> onAutoComplete(String character) { 
    List<String> result = presenter.onTextChanged(character); 
    return result; 
} 

@Override 
public void refreshList(List<String> resultList) { 
    adapter.updateList(resultList); 
} 

public class AddWithTextPresenter implements AddWithText.Presenter { 


AddWithText.View view; 
AddWithText.Model model; 


@Inject 
public AddWithTextPresenter(){ 
    model = new APIModel(this); 
} 

@Override 
public void onComplete(List<String> resultList) { 
    view.refreshList(resultList); 
} 

@Override 
public void setView(AddWithText.View view) { 
    this.view = view; 
} 

@Override 
public List<String> onTextChanged(String character) { 
    return model.loadPlaces(character); 

} 

}

+0

アダプタを設定するコードを追加してください。 – androidnoobdev

+0

@androidnoobdev編集の質問 – nani

答えて

1

あなたがここで間違っ

を行っていますアダプタで
adapter = new PlacesAutoCompleteAdapter(getActivity(),R.layout.list_item,autoComplete,this); 

あなたは4つのパラメータを持っているし、あなただけの3

セカンドを渡しているあなたは、ここでデータを取得しているチェック - そうしてあなたは、任意の場所にデータをアダプターに渡していない場合

@Override 
public List<String> onAutoComplete(String character) { 
    List<String> result = presenter.onTextChanged(character); 
    return result; 
} 

を。アダプタでsetData()のようなメソッドを追加し、データリストを渡します。以下のメソッドを追加してください

public List<String> getData() { 
    return resultList; 
} 

public void setData(List<String> mData) { 
    this.resultList = mData; 
} 

public void addItems(List<String> mData) { 

    if (this.resultList != null) { 
     this.resultList.addAll(mData); 
     notifyItemInserted(this.resultList.size()); 
    } 
} 
+0

ありがとうございますが、残念なことに動作しません。私は問題は、rxの呼び出しでは、アダプタの呼び出しより遅く到着したと思う。それを解決する良い方法はありますか? – nani

+0

ええ、Rxにはたくさんの方法があります。私はどのプロジェクトでもRxを使用していませんが、加入者に送信するデータを終了するときに何らかの方法があることを知っています。その方法を確認して、アダプタをリストに設定することができます。 – androidnoobdev

+0

ありがとうございます;) – nani