こんにちは、私はola/uberソートアプリケーションを作成しようとしています。 私はedit-textにテキストを入力しており、その場所APIに基づいて、提案の配列が形成されています。この配列は、以下に示すクラスの配列を使用して形成されます。フラグメントの変更中に完全なバンドルが取得されない
import com.google.android.gms.location.places.Place;
import java.io.Serializable;
public class SearchListProvider implements Serializable {
private int imageId;
private String name;
private Place place;
public SearchListProvider(int imageId, String name, Place place) {
this.imageId = imageId;
this.name = name;
this.place = place;
}
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
public Place getPlace() {
return place;
}
public void setPlace(Place place) {
this.place = place;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public void setName(String name) {
this.name = name;
}
}
私のアダプタの部分は、どこにドロップダウンですべての値を添付するかを示しています。
public void onBindViewHolder(final RecyclerViewHolder holder, int position) {
SearchListProvider listProvider = null;
if(holder.viewtype == TYPE_LIST){
listProvider= arrayList.get(position);
holder.list_image.setImageResource(listProvider.getImageId());
holder.address_name.setText(listProvider.getName());
(holder.itemView).setTag(listProvider);
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment f= new AmbulanceMap();
Bundle b= new Bundle();
SearchListProvider p= (SearchListProvider) (v).getTag();
b.putSerializable("selectedLocation", p);
f.setArguments(b);
activity.getSupportFragmentManager().beginTransaction().replace(R.id.main_container, f).commit();
}
});
}
すべてがここまでうまくいっています。今すぐドロップダウンのアイテムをクリックすると、フラグメントが変更され、シリアル化オブジェクトが別のフラグメントに送信され、そこで取得しようとします。しかし、私はデータの半分しか得られません。
Bundle b= getArguments();
if(b != null){
SearchListProvider p= (SearchListProvider)b.getSerializable("selectedLocation");
if(p != null){
LatLng latLng= p.getPlace().getLatLng();
//setCurrentLocationMarker(latLng);
Toast.makeText(getContext(), latLng.latitude + "", Toast.LENGTH_SHORT).show();
}
}
デバッグ時に、場所の値がnullであることがわかりました。 理由がわかりません。 誰か助けてくれますか?
NB:getTag()関数自体がnull値をplaceに与えています。
は今、私は機能
p.getPlace().getName()
を評価しようと、私は
Method threw 'java.lang.IllegalArgumentException' exception.
cause = Object has been collected
detailMessage = Object has been collected
stackState = Object has been collected
stackTrace = Object has been collected
新しい編集 - この関数としてエラーを取得していますplaceIdを取り、場所を返す
protected ArrayList<SearchListProvider> doInBackground(String... params) {
String inputText= params[0];
PendingResult<AutocompletePredictionBuffer> autocompletePredictions = geoDataApi.
getAutocompletePredictions(GoogleClient.getIstance(), inputText, null, null);
AutocompletePredictionBuffer autocompletePredictionBuffer = autocompletePredictions.await();
ArrayList<SearchListProvider> searchList= new ArrayList<>();
for(int i=0; i<autocompletePredictionBuffer.getCount(); i++){
geoDataApi.getPlaceById(GoogleClient.getIstance(), autocompletePredictionBuffer.get(i).getPlaceId()).setResultCallback(new ResolvingResultCallbacks<PlaceBuffer>(fragmentActivity, 0) {
@Override
public void onSuccess(@NonNull PlaceBuffer places) {
p = places.get(0);
places.release();
}
@Override
public void onUnresolvableFailure(@NonNull com.google.android.gms.common.api.Status status) {
}
});
searchList.add(
new SearchListProvider(
R.mipmap.ic_launcher,
autocompletePredictionBuffer.get(i).getFullText(null).toString(),
p)
);
}
return searchList;
}
:
はあなたのオートコンプリート予測リスト
など、それを使用するため、このコールバックを試してみてください。 –
listProviderを直接渡すのはなぜですか? –
どのような形式で渡す必要がありますか。可能であれば例を挙げてください –