2017-01-12 35 views
1

在我的应用程序主页上google place自动完成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的

E/AndroidRuntime:致命异常:主 工艺:com.itcastle.kleanify,PID:3659 android.view.InflateException :二进制XML文件行#24:二进制XML文件行#24:在android.view.LayoutInflater.inflate(LayoutInflater.java:539)错误的扩展类片段 at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at 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) at android.view.View.performClick(View.java:5198) at android.view.View $ PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler。 java:739) at android.os.Handler.dispatchMessage(Handler.jav a:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at 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) 引起:android.view .InflateException:二进制XML文件行#24:错误在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 在类的片段 错误。 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) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view。 LayoutInflater.inflate(LayoutInflater。java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at 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) at android.view.View。在android.os.Handler上的android.os.Handler.handleCallback(Handler.java:739) 上执行ClickClick(View.java:5198) at android.view.View $ PerformClick.run(View.java:21147) 。 dispatchMessage(Handler.java:95) at android.os.Looper.l oop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at 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) 导致:java.lang.IllegalArgumentException:二进制XML文件行#24:重复的id 0x7f0e00db,标记null或父标识0xffffffff与com.google.android.gms.location.places.ui.PlaceAutocompleteFragment 的另一个片段位于android.app.android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2205) 处。 FragmentController.onCreateView(FragmentController.java:98) at android.app.Activity.onCreate查看(Activity.java:5546) at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:36) at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754) 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 在机器人。 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at androi(android.view.LayoutInflater.rInflate d.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android。 view.LayoutInflater.inflate(LayoutInflater.java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393) at android.app.Dialog.setContentView(Dialog.java:512) 在com.itcastle.kleanify.WelcomeHomeTemp.EditLocation(WelcomeHomeTemp.java:533) 在com.itcastle.kleanify.WelcomeHomeTemp.onClick(WelcomeHomeTemp.java:453) at android.view.View.performCl ick(View.java:5198) at android.view.View $ PerformClick.run(View.java:21147) 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:5417) at java.lang.reflect.Method。调用(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

在你的地方autocomplete片段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()要记住的事情,你必须设置你的对话框setcancelablefalse,并给出一个关闭对话框并删除fragment的按钮。 如果你想将setcancelable设置为true,那么你应该处理删除片段,如果你不删除片段,它会在第二次膨胀时给出错误。

如果有任何疑问,请告诉我。