0

 Error

I'm trying to use Google Places Autocomplete API in a tab layout fragment. But I'm not able to because of this. What can I do?

The error appearing is: Error:(51, 54) error: incompatible types: Fragment cannot be converted to PlaceAutocompleteFragment

The XML file is:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment
    android:id="@+id/place_autocomplete_fragment"


android:name=
"com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

The Fragment Code:

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.Places;
import 
com.google.android.gms.location.places.ui.PlaceAutocompleteFragment;
import 
 com.google.android.gms.location.places.ui.PlaceSelectionListener;

import butterknife.ButterKnife;


public class LocationSearchFragment extends Fragment implements 
GoogleApiClient.OnConnectionFailedListener {
ViewGroup rootView;
String TAG="Location Search:";
private FragmentActivity myContext;

private Context context;    private GoogleApiClient mGoogleApiClient;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootView = (ViewGroup) inflater

            .inflate(R.layout.place_search, container, false);


    mGoogleApiClient = new GoogleApiClient
            .Builder(rootView.getContext())
            .addApi(Places.GEO_DATA_API)
            .addApi(Places.PLACE_DETECTION_API)
            .build();


    PlaceAutocompleteFragment places= (PlaceAutocompleteFragment)
            getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);

    places.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {

            Toast.makeText(getContext(),place.getName(),Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(Status status) {

            Toast.makeText(getContext(),status.toString(),Toast.LENGTH_SHORT).show();

        }
    });

    ButterKnife.bind(this, rootView);
    return rootView;
}
public void cleanUp(){
    getFragmentManager().beginTransaction().remove().commit();
}
@Override
public void onConnectionFailed(ConnectionResult result) {
    // An unresolvable error has occurred and a connection to Google APIs
    // could not be established. Display an error message, or handle
    // the failure silently

    // ...
}
@Override
public void onAttach(Activity activity) {
    myContext=(FragmentActivity) activity;
    super.onAttach(activity);
}

 }

The whole log:

 05-07 10:38:23.452 27969-27969/com.example.apple.project2 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: com.example.apple.project2, PID: 27969
                                                                        android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class fragment
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:551)
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
                                                                            at com.example.apple.project2.LocationSearchFragment.onCreateView(LocationSearchFragment.java:38)
                                                                            at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
                                                                            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
                                                                            at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
                                                                            at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:753)
                                                                            at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
                                                                            at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
                                                                            at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
                                                                            at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1984)
                                                                            at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626)
                                                                            at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
                                                                            at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
                                                                            at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
                                                                            at android.support.v4.view.ViewPager$3.run(ViewPager.java:273)
                                                                            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                                                                            at android.view.Choreographer.doCallbacks(Choreographer.java:686)
                                                                            at android.view.Choreographer.doFrame(Choreographer.java:619)
                                                                            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                                                                            at android.os.Handler.handleCallback(Handler.java:739)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:148)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:7331)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                                         Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class fragment
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
                                                                            at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)
                                                                            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:527)
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                                            at com.example.apple.project2.LocationSearchFragment.onCreateView(LocationSearchFragment.java:38) 
                                                                            at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 
                                                                            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
                                                                            at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
                                                                            at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:753) 
                                                                            at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
                                                                            at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
                                                                            at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
                                                                            at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1984) 
                                                                            at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626) 
                                                                            at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 
                                                                            at android.support.v4.view.ViewPager.populate(ViewPager.java:1268) 
                                                                            at android.support.v4.view.ViewPager.populate(ViewPager.java:1116) 
                                                                            at android.support.v4.view.ViewPager$3.run(ViewPager.java:273) 
                                                                            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) 
                                                                            at android.view.Choreographer.doCallbacks(Choreographer.java:686) 
                                                                            at android.view.Choreographer.doFrame(Choreographer.java:619) 
                                                                            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) 
                                                                            at android.os.Handler.handleCallback(Handler.java:739) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                            at android.os.Looper.loop(Looper.java:148) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:7331) 
                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                                                                         Caused by: java.lang.IllegalArgumentException: Binary XML file line #8: Duplicate id 0x7f0d0165, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.location.places.ui.PlaceAutocompleteFragment
                                                                            at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2227)
                                                                            at android.app.FragmentController.onCreateView(FragmentController.java:99)
                                                                            at android.app.Activity.onCreateView(Activity.java:6085)
                                                                            at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:36)
                                                                            at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79)
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:766)
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                                                                            at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                                                                            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                                                                            at com.example.apple.project2.LocationSearchFragment.onCreateView(LocationSearchFragment.java:38) 
                                                                            at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 
                                                                            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
                                                                            at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
                                                                            at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:753) 
                                                                            at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
                                                                            at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
                                                                            at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
                                                                            at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1984) 
                                                                            at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626) 
                                                                            at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 
                                                                            at android.support.v4.view.ViewPager.populate(ViewPager.java:1268) 
                                                                            at android.support.v4.view.ViewPager.populate(ViewPager.java:1116) 
                                                                            at android.support.v4.view.ViewPager$3.run(ViewPager.java:273) 
                                                                            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) 
                                                                            at android.view.Choreographer.doCallbacks(Choreographer.java:686) 
                                                                            at android.view.Choreographer.doFrame(Choreographer.java:619) 
                                                                            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) 
                                                                            at android.os.Handler.handleCallback(Handler.java:739) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                            at android.os.Looper.loop(Looper.java:148) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:7331) 
                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

05-07 10:38:25.192 27969-27969/com.example.apple.project2 I/Process: Sending signal. PID: 27969 SIG: 9

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Saarah Asad
  • 134
  • 2
  • 12
  • Can you post your xml file code for map fragment? – pRaNaY May 07 '17 at 04:51
  • @I pRaNaY I changed it to getActivity().getFragmentManager. It works fine now when I'm in that tab. But when i change tabs the whole app crashes and this is the error I get. What can I do? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.apple.project2, PID: 22496 android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class fragment – Saarah Asad May 07 '17 at 04:56
  • Read the rest of the stacktrace. They're not the only error, probably – OneCricketeer May 07 '17 at 05:07
  • Seen this? http://stackoverflow.com/questions/34416817/how-to-implement-placeautocompletefragment-and-placeautocompleteactivity-to-get – OneCricketeer May 07 '17 at 05:10
  • `IllegalArgumentException: Binary XML file line #8: Duplicate id 0x7f0d0165, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.location.places.ui.PlaceAutocompleteFragment`... You've already added that ID to Fragment manager – OneCricketeer May 07 '17 at 05:12
  • Anyway, you're extending a Fragment already? Why are you using Fragments within Fragments? Just extend the PlaceAutocompleteF‌ragment instead – OneCricketeer May 07 '17 at 05:14
  • @cricket_007 I'm using tab layouts. I want to put PlaceAutocompleteF‌ragment inside one of my tablayout tab which is a fragment – Saarah Asad May 07 '17 at 05:16
  • Just add a new PlaceAutocompleteF‌ragment, then. Do you need a custom class? – OneCricketeer May 07 '17 at 05:17
  • @cricket_007 Where do i add it? – Saarah Asad May 07 '17 at 05:19
  • To the tab layout? Or the viewpager adapter – OneCricketeer May 07 '17 at 05:20
  • Or, like I said `LocationSearchFragment extends PlaceAutocompleteF‌ragment`... Up to you – OneCricketeer May 07 '17 at 05:21
  • @cricket_007 But LocationSearchFragment has to extent fragment because it needs to return something to where its called? Its throwing me another error if i dont – Saarah Asad May 07 '17 at 05:26
  • You can extend whatever Fragment class... It's much easier to extend the actual autocomplete one rather than trying to make one on your own. – OneCricketeer May 07 '17 at 05:28

1 Answers1

0

First error, you import the wrong Fragment.

 import android.support.v4.app.Fragment

Instead of

 import android.app.Fragment

Second error, you're making an unnecessary xml file and putting an additional Fragment within another Fragment.

Try to start over with this

public class LocationSearchFragment extends PlaceAutocompleteFragment implements 
    GoogleApiClient.OnConnectionFailedListener, 
    PlaceSelectionListener {

    public static final String TAG="Location Search:";
    private GoogleApiClient mGoogleApiClient;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setOnPlaceSelectedListener(this);
    }

    @Override
    public void onPlaceSelected(Place place) {
        Toast.makeText(getActivity(),
              place.getName(),Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onError(Status status) {
         Toast.makeText(getActivity() ,
             status.toString(),Toast.LENGTH_SHORT).show();
      }

      @Override
     public void onConnectionFailed(ConnectionResult result)  {

      }

    @Override 
    public void onAttach(Activity activity) {
        mGoogleApiClient = new GoogleApiClient
             .Builder(activity)
             .addApi(Places.GEO_DATA_API)
             .addApi(Places.PLACE_DETECTION_API)
            .build();
     } 

}
OneCricketeer
  • 179,855
  • 19
  • 132
  • 245