2014-02-23 123 views
1

我的代码存在一些问题。我不断收到这些错误。我试着搜索谷歌,看看几种可能的解决方案,但他们都没有工作。我已经整天坐在这个问题上,直到问题解决之前,我的应用程序无法真正进展。我感谢任何帮助。片段 - 错误膨胀

>  02-22 19:11:14.110: E/AndroidRuntime(2075): FATAL EXCEPTION: main 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): java.lang.RuntimeException: Unable to start activity 
> ComponentInfo{com.example.slidingmenu/com.example.slidingmenu.MainActivity}: 
> android.view.InflateException: Binary XML file line #2: Error 
> inflating class fragment 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.os.Handler.dispatchMessage(Handler.java:99) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.os.Looper.loop(Looper.java:137) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.ActivityThread.main(ActivityThread.java:5103) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at java.lang.reflect.Method.invokeNative(Native Method) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at java.lang.reflect.Method.invoke(Method.java:525) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at dalvik.system.NativeStart.main(Native Method) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): Caused by: android.view.InflateException: Binary XML file line #2: Error 
> inflating class fragment 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.inflate(LayoutInflater.java:469) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at com.example.slidingmenu.HomeFragment.onCreateView(HomeFragment.java:16) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.Fragment.performCreateView(Fragment.java:1695) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.Activity.onCreateView(Activity.java:4765) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.inflate(LayoutInflater.java:469) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at com.example.slidingmenu.HomeFragment.onCreateView(HomeFragment.java:16) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.Fragment.performCreateView(Fragment.java:1695) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.BackStackRecord.run(BackStackRecord.java:682) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.Activity.performStart(Activity.java:5142) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): ... 11 more 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): Caused by: java.lang.IllegalArgumentException: Binary XML file line #2: Duplicate 
> id 0x7f0a0006, tag null, or parent id 0x7f0a0001 with another fragment 
> for null 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.Activity.onCreateView(Activity.java:4751) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): ... 29 more 

这里是我的代码:

package com.example.slidingmenu; 

import java.util.ArrayList; 

import model.NavDrawerItem; 

import adapter.NavDrawerListAdapter; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.FragmentManager; 
import android.content.res.Configuration; 
import android.content.res.TypedArray; 
import android.app.Fragment; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.widget.DrawerLayout; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 

public class MainActivity extends Activity { 
    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private ActionBarDrawerToggle mDrawerToggle; 

    private CharSequence mDrawerTitle; 
    private CharSequence mTitle; 

    private String[] navMenuTitles; 
    private TypedArray navMenuIcons; 

    private ArrayList<NavDrawerItem> navDrawerItems; 
    private NavDrawerListAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTitle = mDrawerTitle = getTitle(); 

     navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); 
     navMenuIcons = getResources().obtainTypedArray(R.array.nav_drawer_icons); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.list_slidermenu); 

     navDrawerItems = new ArrayList<NavDrawerItem>(); 

     navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1), true, "22")); 

     navMenuIcons.recycle(); 

     adapter = new NavDrawerListAdapter(getApplicationContext(), navDrawerItems); 
     mDrawerList.setAdapter(adapter); 

     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, R.string.app_name, R.string.app_name){ 
      public void onDrawerClosed(View view) { 
       getActionBar().setTitle(mTitle); 
       invalidateOptionsMenu(); 
      } 

      public void onDrawerOpened(View view) { 
       getActionBar().setTitle(mDrawerTitle); 
       invalidateOptionsMenu(); 
      } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 
     SlideMenuClickListener s = new SlideMenuClickListener(); 
     if(savedInstanceState == null) { 
      s.displayView(0); 
     } 
     mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     switch (item.getItemId()) { 
     case R.id.action_settings: 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
     menu.findItem(R.id.action_settings).setVisible(!drawerOpen); 
     return super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public void setTitle(CharSequence title) { 
     mTitle = title; 
     getActionBar().setTitle(title); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    private class SlideMenuClickListener implements ListView.OnItemClickListener { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      displayView(position); 
     } 

     private void displayView(int position) { 
      Fragment fragment = null; 
      switch(position) { 
      case 0: 
       fragment = new HomeFragment(); 
       break; 

      case 1: 
       break; 

      case 2: 
       break; 
      } 

      if(fragment != null) { 
       FragmentManager fragmentManager = getFragmentManager(); 
       fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit(); 

       mDrawerList.setItemChecked(position, true); 
       mDrawerList.setSelection(position); 
       setTitle(navMenuTitles[position]); 
       mDrawerLayout.closeDrawer(mDrawerList); 
      } else { 
       Log.e("MainActivity", "Error in creating the fragment"); 
      } 
     } 
    } 
} 

fragment_home.xml

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/home_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:text="sadsa" /> 
</fragment> 

编辑:

ADDED HomeFragment.java

package com.example.slidingmenu; 

import android.os.Bundle; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class HomeFragment extends Fragment { 

    public HomeFragment() {} 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedIntanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_home, container, false); 

     return rootView; 
    } 
} 
+0

就在我阅读的代码完全 - 你做了一个清洁(Eclipse中)或无效,并重新启动(Android的工作室/ InteliJ)? –

+0

我已经做了好几次了。我还没有尝试重新启动Eclispe。 – Ilhami

回答

0

这一部分看起来很重要:

>  02-22 19:11:14.110: E/AndroidRuntime(2075): at com.example.slidingmenu.HomeFragment.onCreateView(HomeFragment.java:16) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.Fragment.performCreateView(Fragment.java:1695) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.app.Activity.onCreateView(Activity.java:4765) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.inflate(LayoutInflater.java:469) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
>  02-22 19:11:14.110: E/AndroidRuntime(2075): at com.example.slidingmenu.HomeFragment.onCreateView(HomeFragment.java:16) 

通知我已经张贴位的第一个和最后一个行是一样的吗?告诉我这个片段正在试图自我膨胀。碎片布局/代码在哪里?

编辑

的问题是在你的片段XML。您使用的rood视图是'fragment',xml中的fragment标签意思是'用我的id /名称中声明的片段的实例替换它'!

其效果是,每个片段膨胀时,它试图夸大自身内部本身......

你需要做的是要么merge替换根标签在你的片段的XML(如果你知道这个做什么)或ViewGroupFrameLayoutRelativeLayoutLinearLayout

+0

我编辑了我的文章。 – Ilhami

+1

我发现我认为自己的错误。 Aaaaah我很愚蠢。你写的是对的。 – Ilhami

-1

尝试从片段活动扩展您的MainActivity

public class MainActivity extends FragmentActivity 
+0

这并没有解决它。 – Ilhami

+0

这不是一个合理的答案,因为你只需要阅读logcat就可以看到这不是问题,因为android很擅长打印这样的建议 –