2017-01-12 2 views
1

На моей домашней странице приложения google place auto complete fragment открывается при нажатии кнопки внутри диалоговой панели, и местоположение используется для поискового запроса. Проблема заключается в том, что когда я пытаюсь изменить местоположение, снова нажимая кнопку, приложение выходит из строя со следующей ошибкой.Ошибка Google PlaceAutocompleteFragment с ошибкой

*android.view.InflateException: Binary XML file line #24: Binary XML file line #24: Error inflating class fragment 
Duplicate id 0x7f0e00db, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.location.places.ui.PlaceAutocompleteFragment* 

Это активность нажатия кнопки и метод, который он вызывает.

case R.id.text_area: 
      EditLocation(); 
      break; 

private void EditLocation() { 

    final Dialog dialog = new Dialog(context); 
    dialog.setContentView(R.layout.area); 
    dialog.setTitle("Please enter the location"); 
    PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment) 
      getFragmentManager().findFragmentById(R.id.autocomplete_fragment); 


    ((EditText)autocompleteFragment.getView().findViewById(R.id.place_autocomplete_search_input)).setHint("Search Location"); 
    //((EditText)autocompleteFragment.getView().findViewById(R.id.place_autocomplete_search_input)).setTextSize(10.0f); 
    //txtlocation=(TextView) findViewById(R.id.dialogLocationText); 

    autocompleteFragment.setOnPlaceSelectedListener(this); 
    Button dialogButtonSave = (Button) dialog.findViewById(R.id.btnOK); 
    // if button is clicked, close the custom dialog 
    dialogButtonSave.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //area=dialogLocation.getText().toString(); 
      location.setText(area); 
      dialog.dismiss(); 
      //autocompleteFragment.setText(""); 

     } 
    }); 
    dialog.show(); 


} 

Ниже приводится код XML

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:orientation="vertical"> 
    <android.support.v7.widget.CardView 
     android:layout_width="fill_parent" 
     android:layout_marginTop="10dp" 
     android:layout_height="35dp" 
     android:layout_gravity="center_vertical" 
     android:layout_marginBottom="10dp" 
     android:layout_weight=".335" 
     android:gravity="center" 
     android:textSize="13sp" 
     android:background="@android:color/white" 
     > 

     <fragment 
      android:id="@+id/autocomplete_fragment" 
      android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
    </android.support.v7.widget.CardView> 


<Button 
    android:id="@+id/btnOK" 
    android:layout_width="350dp" 
    android:layout_margin="10dp" 
    android:layout_height="35dp" 
    android:text="OK" 
    android:background="@drawable/custom_btn_orange"/> 
</LinearLayout> 

Ниже приведены скриншоты того, как кнопка и фрагмент работать.

Searchbar

Fraggment

Ниже приводится LogCat

Е/AndroidRuntime: неустранимым: Основной процесса: com.itcastle.kleanify, ПИД: 3659 android.view.InflateException : Двоичная строка XML-файла # 24: двоичная строка XML-файла # 24: ошибка раздувания фрагмента класса на android.view.LayoutInflater.inflate (LayoutInflater.java:539) на android.view.LayoutInflater.inflate (LayoutInflater.java:423) на android.view.LayoutInflater.inflate (LayoutInflater.java:374) на com.android.internal.policy.PhoneWindow.setContentView (PhoneWindow.java: 393) в android.app.Dialog.setContentView (Dialog.java:512) в com.itcastle.kleanify.WelcomeHomeTemp.EditLocation (WelcomeHomeTemp.java:533) в com.itcastle.kleanify.WelcomeHomeTemp.onClick (WelcomeHomeTemp. java: 453) на android.view.View.performClick (View.java:5198) на android.view.View $ PerformClick.run (View.java:21147) на android.os.Handler.handleCallback (Handler. java: 739) на android.os.Handler.dispatchMessage (Handler.jav a: 95) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) на java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Причиненный: android.view .InflateException: двоичная строка XML-файла # 24: ошибка раздувания фрагмента класса на android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:782) на android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:704) на android. view.LayoutInflater.rInflate (LayoutInflater.java:835) at android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:798) на android.view.LayoutInflater.rInflate (LayoutInflater.java:838) на android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:798) на андроид. view.LayoutInflater.rInflate (LayoutInflater.java:838) на android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:798) на android.view.LayoutInflater.inflate (LayoutInflater.java:515) на android.view. LayoutInflater.inflate (LayoutInflater.java: 423) на android.view.LayoutInflater.inflate (LayoutInflater.java:374) на com.android.internal.policy.PhoneWindow.setContentView (PhoneWindow.java:393) на android.app.Dialog.setContentView (Dialog.java:512) на com.itcastle.kleanify.WelcomeHomeTemp.EditLocation (WelcomeHomeTemp.java:533) на com.itcastle.kleanify.WelcomeHomeTemp.onClick (WelcomeHomeTemp.java:453) на android.view.View. performClick (View.java:5198) на android.view.View $ PerformClick.run (View.java:21147) на android.os.Handler.handleCallback (Handler.java:739) на android.os.Handler. dispatchMessage (Handler.java:95) на android.os.Looper.l oop (Looper.java:148) at android.app.ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Вызвано: java.lang.IllegalArgumentException: двоичная строка XML-файла # 24: Дубликат id 0x7f0e00db, тег null или родительский id 0xffffffff с другим фрагментом для com.google.android.gms.location.places.ui.PlaceAutocompleteFragment на android.app.FragmentManagerImpl.onCreateView (FragmentManager.java:2205) на android.app. FragmentController.onCreateView (FragmentController.java:98) на android.app.Activity.onCreate Просмотр (Activity.java:5546) на android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView (BaseFragmentActivityHoneycomb.java:36) в android.support.v4.app.FragmentActivity.onCreateView (FragmentActivity.java:75) в android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:754) на android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:704) на android.view.LayoutInflater.rInflate (LayoutInflater.java:835) на андроид. view.LayoutInflater.rInflateChildren (LayoutInflater.java:798) на android.view.LayoutInflater.rInflate (LayoutInflater.java:838) на android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:798) в Androi d.view.LayoutInflater.rInflate (LayoutInflater.java:838) на android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:798) на android.view.LayoutInflater.inflate (LayoutInflater.java:515) на андроид. view.LayoutInflater.inflate (LayoutInflater.java:423) на android.view.LayoutInflater.inflate (LayoutInflater.java:374) на com.android.internal.policy.PhoneWindow.setContentView (PhoneWindow.java:393) at android.app.Dialog.setContentView (Dialog.java:512) at com.itcastle.kleanify.WelcomeHomeTemp.EditLocation (WelcomeHomeTemp.java:533) at com.itcastle.kleanify.WelcomeHomeTemp.onClick (WelcomeHomeTemp.java:453) на android.view.View.performCl ick (View.java:5198) на android.view.View $ PerformClick.run (View.java:21147) на android.os.Handler.handleCallback (Handler.java:739) на android.os.Handler. dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) на java.lang.reflect.Method. invoke (Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) I/Процесс: сигнал отправки. PID: 3659 SIG: 9 Приложение прекращено.

У меня много вопросов, и почти везде ответ заключается в том, чтобы добавить некоторые строки кода внутри onDestroyView(), которые у меня нет. При первом щелчке фрагмент работает отлично, проблема в том, что я снова нажимаю кнопку, чтобы изменить местоположение, которое приложение полностью подавляет. Любое предложение приветствуется. Благодарю.

+0

опубликовать ваш logcat – Gaurav

+0

отредактировал вопрос. Добавлено logcat. Благодарю. –

+0

нашел решение? @HasanSawan –

ответ

2

попробовать это в вашем фрагменте карты:

public void onDestroyView() { 
    super.onDestroyView(); 
    FragmentManager fm = getActivity().getSupportFragmentManager(); 
    Fragment fragment = (fm.findFragmentById(R.id.map)); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.remove(fragment); 
    ft.commit(); 
} 
+0

, где я должен это поставить? Внутри метода Editlocation()? –

+0

Внутри вашего места автокомпонента фрагмент class..it является делегатским методом фрагмента, например onCreate() – rafsanahmad007

1

Вот код для того же dialog_xml

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    card_view:cardCornerRadius="3dp" 
    card_view:cardElevation="4dp" 
    android:layout_marginBottom="2dp" 
    card_view:contentPadding="1dp" 
    android:layout_margin="2dp" 
    tools:ignore="MissingPrefix" 
    card_view:cardBackgroundColor="#fff"> 


<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/activity_geofence" 
     android:layout_width="match_parent" 
     android:layout_marginRight="12dp" 
     android:layout_marginLeft="12dp" 
     android:layout_height="match_parent" 
     tools:ignore="MissingPrefix" 
     tools:context="in.gpstracar.gpstracker.GeofenceActivity"> 

     <Button 
      android:text="Cancel" 
      android:layout_width="match_parent" 
      fontPath="fonts/arial.ttf" 
      android:textColor="@color/text_color" 
      android:background="#fff" 
      android:layout_marginBottom="8dp" 
      android:textStyle="bold" 
      android:layout_marginTop="5dp" 
      android:elevation="2dp" 
      android:layout_below="@+id/addGeofenceBtn" 
      android:layout_height="wrap_content" 
      android:id="@+id/dismissbutton1" 

      /> 

     <Button 
      android:text="Select" 
      android:layout_width="match_parent" 
      fontPath="fonts/arial.ttf" 
      android:textColor="#fff" 
      android:textStyle="bold" 
      android:layout_marginTop="20dp" 
      android:background="@color/colorPrimary" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/setRadiusEditText" 
      android:id="@+id/submit_buttom" /> 

     <fragment 
      android:id="@+id/place_autocomplete_fragment" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:name="com.google.android.gms.location.places.ui.SupportPlaceAutocompleteFragment" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginTop="53dp" /> 

     <TextView 
      android:text="Dialog_Title" 
      android:layout_width="wrap_content" 
      fontPath="fonts/arial.ttf" 
      android:textColor="@color/text_color" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:layout_centerHorizontal="true" 
      android:id="@+id/textView8" 
      android:textStyle="normal|bold" /> 

    </RelativeLayout> 

И Inflating_Dialog активности

private void OpeningDialog(){ 

    final SupportPlaceAutocompleteFragment places ; 
    dialog = new Dialog(MainActivity.this); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setCancelable(false); 
    dialog.setContentView(R.layout.geo_fence_dialog); 


    places= (SupportPlaceAutocompleteFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.place_autocomplete_fragment); 

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

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

     @Override 
     public void onError(Status status) { 

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

     } 
    }); 

    Button submitbutton = (Button) dialog.findViewById(R.id.submit_buttom); 
    submitbutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      FragmentTransaction ft2 = getSupportFragmentManager() 
        .beginTransaction(); 
      ft2.remove(getSupportFragmentManager() 
        .findFragmentById(R.id.place_autocomplete_fragment)); 
      ft2.commit(); 
      dialog.dismiss(); 
     } 
    }); 

    Button dialogButton = (Button) dialog.findViewById(R.id.dismissbutton1); 
    dialogButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      FragmentTransaction ft2 = getSupportFragmentManager() 
        .beginTransaction(); 
      ft2.remove(getSupportFragmentManager() 
        .findFragmentById(R.id.place_autocomplete_fragment)); 
      ft2.commit(); 
      dialog.dismiss(); 
     } 
    }); 

    dialog.show(); 
} 

Теперь Просто вызвать метод OpeningDialog() Что следует помнить, используя это, вы должны установить свой диалог на setcancelable на номер false и дать кнопку закрытия диалогового окна и удалить fragment. Если вы хотите установить setcancelable на true, тогда вам следует обработать удаление фрагмента на этом, если вы не удалите фрагмент, он даст ошибку при раздувании во второй раз.

Если у вас есть какие-либо вопросы, дайте мне знать.

Смежные вопросы