RuntimeException:android.view.InflateException:二进制XML文件行#8:错误扩展类片段

问题描述:

我想将我的Google地图与Facebook SDK集成,通过Facebook检查位置并以相同的布局共享它,但是当我添加此代码方法的onCreate(),它是强制关闭,并告诉一个错误RuntimeException:android.view.InflateException:二进制XML文件行#8:错误扩展类片段

if (savedInstanceState == null) { 
    // Add the fragment on initial activity setup 
    mainFragment = new MainFragment(); 

    getSupportFragmentManager().beginTransaction().add(android.R.id.content, mainFragment).commit(); 
    myFragmentManager = getSupportFragmentManager(); 
    mainFragment = (MainFragment) myFragmentManager.findFragmentById(R.id.checkIn); 
} else { 
    // Or set the fragment from restored state info 
    mainFragment = (MainFragment) getSupportFragmentManager().findFragmentById(android.R.id.content); 
} 

,这里是我的onCreate()方法

protected void onCreate(final Bundle savedInstanceState) { 
    try { 

     // Permission StrictMode 
     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
        .permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.check_in); 



     checkInButton = (Button) findViewById(R.id.shareButton); 
     checkInButton.setVisibility(View.VISIBLE); 

     authButton = (Button)findViewById(R.id.authButton); 
     authButton.setVisibility(View.VISIBLE); 


     endLocationEditText = (EditText) findViewById(R.id.endLocationEditText); 
     endLocationEditText.setVisibility(View.INVISIBLE); 
     startLocationEdittext = (EditText) findViewById(R.id.starLocationEditText); 
     startLocationEdittext.setVisibility(View.INVISIBLE); 

     toggle = (ToggleButton) findViewById(R.id.togglebutton); 
     toggle.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (hasConnection(getApplicationContext()) == true) { 
        if (toggle.isChecked()) { 
         endLocationEditText = (EditText) findViewById(R.id.endLocationEditText); 
         endLocationEditText.setVisibility(View.VISIBLE); 
         startLocationEdittext = (EditText) findViewById(R.id.starLocationEditText); 
         startLocationEdittext.setVisibility(View.INVISIBLE); 
         goButton.setVisibility(View.VISIBLE); 
        } else { 
         endLocationEditText = (EditText) findViewById(R.id.endLocationEditText); 
         endLocationEditText.setVisibility(View.INVISIBLE); 
         startLocationEdittext = (EditText) findViewById(R.id.starLocationEditText); 
         startLocationEdittext.setVisibility(View.VISIBLE); 
         goButton.setVisibility(View.VISIBLE); 
        } 

        checkInButton.setVisibility(View.VISIBLE); 
        checkInButton.setOnClickListener(new OnClickListener() { 
         public void onClick(View v) { 
          endLocationEditText 
            .setVisibility(View.INVISIBLE); 
          AlertDialog.Builder builder = new AlertDialog.Builder(
            CheckIn.this); 
          builder.setTitle("Attach photo?"); 
          builder.setNegativeButton("No", 
            new DialogInterface.OnClickListener() { 
             public void onClick(
               DialogInterface dialog, 
               int which) { 

             } 

            }); 
          builder.setPositiveButton("Yes", 
            new DialogInterface.OnClickListener() { 
             public void onClick(
               DialogInterface dialog, 
               int which) { 
              Intent captureIntent = new Intent(
                MediaStore.ACTION_IMAGE_CAPTURE); 
              startActivityForResult(
                captureIntent, 
                CAMERA_CAPTURE); 
             } 
            }); 
          builder.show(); 

         } 
        }); 
       } else { 
        System.out.println("ยังไม่ได้ต่อเน็ต"); 
        AlertDialog.Builder builder = new AlertDialog.Builder(
          CheckIn.this); 
        builder.setTitle("Please connect to the Internet."); 
        builder.show(); 
       } 

      } 
     }); 

     goButton = (Button) findViewById(R.id.goButton); 
     goButton.setVisibility(View.INVISIBLE); 
     goButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (toggle.isChecked() == true) { 
        String location = endLocationEditText.getText() 
          .toString(); 
        if (location != null && !location.equals("")) { 
         new GeocoderTask().execute(location); 
        } 
       } else { 
        String location = startLocationEdittext.getText() 
          .toString(); 
        if (location != null && !location.equals("")) { 
         new GeocoderTask().execute(location); 
        } 
       } 

      } 
     }); 

     myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     String provider = myLocationManager.getBestProvider(criteria, true); 
     Location location = myLocationManager 
       .getLastKnownLocation(provider); 
     if (location != null) { 
      onLocationChanged(location); 
     } 

     myLocationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 20000, 0, this); 

     // สำหรับแสดง Google maps v2 
     FragmentManager myFragmentManager = getSupportFragmentManager(); 
     SupportMapFragment mySupportMapFragment = (SupportMapFragment) myFragmentManager 
       .findFragmentById(R.id.checkIn); 
     myMap = mySupportMapFragment.getMap(); 
     myMap.setMyLocationEnabled(true); 
     fromMarkerPosition = new LatLng(location.getLatitude(), 
       location.getLongitude()); 
     toMarkerPosition = fromMarkerPosition; 
     myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
       fromMarkerPosition, 13)); 
     myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     myMap.addMarker(new MarkerOptions() 
       .position(fromMarkerPosition) 
       .title("Yor are here!") 
       .icon(BitmapDescriptorFactory 
         .defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); 
     myMap.getUiSettings().setCompassEnabled(true); 
     myMap.getUiSettings().setZoomControlsEnabled(true); 
     /* จบการแสดง maps */ 

     // สร้าง click event สำหรับระบุพิกัดจุด 
     myMap.setOnMapClickListener(new OnMapClickListener() { 
      public void onMapClick(LatLng arg0) { 

       if (hasConnection(getApplicationContext()) == true) { 
        final LatLng coordinate = arg0; 
        AlertDialog.Builder builder = new AlertDialog.Builder(
          CheckIn.this); 

        endLocationEditText.setVisibility(View.INVISIBLE); 
        startLocationEdittext.setVisibility(View.INVISIBLE); 
        goButton.setVisibility(View.INVISIBLE); 
        System.out 
          .println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); 
        builder.setTitle("Select Marker").setItems(
          new String[] { "From", "To" }, 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, 
             int position) { 

            try { 
             if (position == 0) { 
              fromMarkerPosition = coordinate; 
              System.out 
                .println(fromMarkerPosition 
                  + " yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"); 
              refreshMarker(); 
             } else if (position == 1) { 
              toMarkerPosition = coordinate; 
              System.out 
                .println(toMarkerPosition 
                  + " ttttttttttttttttttttttttttttttttttttttt"); 
              refreshMarker(); 
             } 
            } catch (Exception ex) { 
             ex.printStackTrace(); 
             System.out 
               .println("Please connect to the internet first"); 
            } 
           } 
          }); 
        builder.show(); 
        myMap.animateCamera(CameraUpdateFactory 
          .newLatLng(coordinate)); 

        checkInButton.setVisibility(View.VISIBLE); 
        checkInButton.setOnClickListener(new OnClickListener() { 
         public void onClick(View v) { 
          endLocationEditText 
            .setVisibility(View.INVISIBLE); 
          AlertDialog.Builder builder = new AlertDialog.Builder(
            CheckIn.this); 
          builder.setTitle("Attach photo?"); 
          builder.setNegativeButton("No", 
            new DialogInterface.OnClickListener() { 
             public void onClick(
               DialogInterface dialog, 
               int which) { 

             } 

            }); 
          builder.setPositiveButton("Yes", 
            new DialogInterface.OnClickListener() { 
             public void onClick(
               DialogInterface dialog, 
               int which) { 
              Intent captureIntent = new Intent(
                MediaStore.ACTION_IMAGE_CAPTURE); 
              startActivityForResult(
                captureIntent, 
                CAMERA_CAPTURE); 
             } 
            }); 
          builder.show(); 

         } 
        }); 
       } else { 
        System.out.println("ยังไม่ได้ต่อเน็ต"); 
        AlertDialog.Builder builder = new AlertDialog.Builder(
          CheckIn.this); 
        builder.setTitle("Please connect to the Internet."); 
        builder.show(); 
       } 

      } 
     }); 

     if (savedInstanceState == null) { 
      // Add the fragment on initial activity setup 

      mainFragment = new MainFragment(); 
      getSupportFragmentManager().beginTransaction().add(android.R.id.content, mainFragment).commit(); 
      myFragmentManager = getSupportFragmentManager(); 
      mainFragment = (MainFragment) myFragmentManager 
        .findFragmentById(R.id.checkIn); 
     } else { 

      // Or set the fragment from restored state info 
      mainFragment = (MainFragment) getSupportFragmentManager() 
      .findFragmentById(android.R.id.content); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
}// end onCreate 

这里是我的MainFragment类........

public class MainFragment extends Fragment{ 

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 
private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; 
private boolean pendingPublishReauthorization = false; 
private Button shareButton; 
private UiLifecycleHelper uiHelper; 
private static final String TAG = "MainFragment"; 

private Session.StatusCallback callback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     onSessionStateChange(session, state, exception); 
    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    uiHelper = new UiLifecycleHelper(getActivity(), callback); 
    uiHelper.onCreate(savedInstanceState); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, 
     Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    View view = inflater.inflate(R.layout.check_in, container, false); 

    LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton); 
    authButton.setFragment(this); 
    authButton.setReadPermissions(Arrays.asList("user_likes", "user_status")); 

    shareButton = (Button) view.findViewById(R.id.shareButton); 
    shareButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      publishStory();   
     } 
    }); 

    if (savedInstanceState != null) { 
     pendingPublishReauthorization = 
      savedInstanceState.getBoolean(PENDING_PUBLISH_KEY, false); 
    } 
    return view; 
} 

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
    if (state.isOpened()) { 
     Log.i(TAG, "Logged in..."); 
    } else if (state.isClosed()) { 
     Log.i(TAG, "Logged out..."); 
    } 

    if (state.isOpened()) { 
     shareButton.setVisibility(View.VISIBLE); 
     if (pendingPublishReauthorization && 
       state.equals(SessionState.OPENED_TOKEN_UPDATED)) { 
      pendingPublishReauthorization = false; 
      publishStory(); 
     } 
    } else if (state.isClosed()) { 
     shareButton.setVisibility(View.INVISIBLE); 
    } 
} 


private void publishStory() { 
    Session session = Session.getActiveSession(); 

    if (session != null){ 

     // Check for publish permissions  
     List<String> permissions = session.getPermissions(); 
     if (!isSubsetOf(PERMISSIONS, permissions)) { 
      pendingPublishReauthorization = true; 
      Session.NewPermissionsRequest newPermissionsRequest = new Session 
        .NewPermissionsRequest(this, PERMISSIONS); 
     session.requestNewPublishPermissions(newPermissionsRequest); 
      return; 
     } 

     Bundle postParams = new Bundle(); 
     postParams.putString("name", "Facebook SDK for Android"); 
     postParams.putString("caption", "Build great social apps and get more installs."); 
     postParams.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps."); 
     postParams.putString("link", "https://developers.facebook.com/android"); 
     postParams.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png"); 

     Request.Callback callback= new Request.Callback() { 
      public void onCompleted(Response response) { 
       JSONObject graphResponse = response 
              .getGraphObject() 
              .getInnerJSONObject(); 
       String postId = null; 
       try { 
        postId = graphResponse.getString("id"); 
       } catch (JSONException e) { 
        Log.i(TAG, 
         "JSON error "+ e.getMessage()); 
       } 
       FacebookRequestError error = response.getError(); 
       if (error != null) { 
        Toast.makeText(getActivity() 
         .getApplicationContext(), 
         error.getErrorMessage(), 
         Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(getActivity() 
          .getApplicationContext(), 
          postId, 
          Toast.LENGTH_LONG).show(); 
       } 
      } 
     }; 

     Request request = new Request(session, "me/feed", postParams, 
           HttpMethod.POST, callback); 

     RequestAsyncTask task = new RequestAsyncTask(request); 
     task.execute(); 
    } 

} 

private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) { 
    for (String string : subset) { 
     if (!superset.contains(string)) { 
      return false; 
     } 
    } 
    return true; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    Session session = Session.getActiveSession(); 
    if (session != null && 
      (session.isOpened() || session.isClosed())) { 
     onSessionStateChange(session, session.getState(), null); 
    } 

    uiHelper.onResume(); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    uiHelper.onActivityResult(requestCode, resultCode, data); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    uiHelper.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    uiHelper.onDestroy(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putBoolean(PENDING_PUBLISH_KEY, pendingPublishReauthorization); 
    uiHelper.onSaveInstanceState(outState); 
} 

}

XML 8号线在这里

<fragment 
    android:id="@+id/checkIn" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/authButton" 
    class="com.google.android.gms.maps.SupportMapFragment" /> 

这里是一个错误

03-09 20:17:15.433: E/AndroidRuntime(12547): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
03-09 20:17:15.433: E/AndroidRuntime(12547): Caused by: java.lang.IllegalArgumentException: Binary XML file line #8: Duplicate id 0x7f04000a, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment 
+2

在这里你应该有一个堆栈跟踪的“引起”部分。如果是这样,请发布。如果没有,请确保您从'FragmentActivity'继承,而不是'Activity'。 – CommonsWare 2013-03-09 13:02:52

+0

是的,我没有忘记从FragmentActivity继承。 – 2013-03-09 13:26:30

+0

您似乎试图从'Fragment'的'onCreateView()'对包含'SupportMapFragment'的布局进行膨胀。虽然嵌套的碎片确实是可能的,但我不确定这是否正确。 – CommonsWare 2013-03-09 13:37:27

看看http://code.google.com/p/gmaps-api-issues/issues/detail?id=5064#c1对于如何正确把SupportMapFragment内部片段。