2016-02-05 140 views
-2

我从这个链接下载了这个基本片段的例子(http://developer.android.com/training/basics/fragments/creating.html)!这是完美的,它在平板电脑上比在手机上。但是我在另一个项目上实现的那一刻只是在电话上......当它应该打开大型Tbalet上的xml文件时,应用程序在启动时崩溃!方案?我失去了什么?谢谢!大活动片段

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chiari.nicola.myapplication/com.chiari.nicola.myapplication.MainActivity_list}: android.view.InflateException: Binary XML file line #23: Error inflating class fragment 

这是类

public class HeadlinesFragment extends ListFragment { 

String[] Headlines = { 
     "Article One", 
     "Article Two", 
     "Article 3", 
     "Article 4", 
     "Article 5", 
     "Article 6", 
}; 

SearchView search_view; 



OnHeadlineSelectedListener mCallback; 

String[] menutitles; 
TypedArray menuIcons; 

CustomAdapter adapter; 
private List<RowItem> rowItems; 

// The container Activity must implement this interface so the frag can deliver messages 
public interface OnHeadlineSelectedListener { 
    /** Called by HeadlinesFragment when a list item is selected */ 
    public void onArticleSelected(int position); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // We need to use a different list item layout for devices older than Honeycomb 
    int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1; 

    return inflater.inflate(R.layout.list_fragment, null, false); 











} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 

    super.onActivityCreated(savedInstanceState); 

    menutitles = getResources().getStringArray(R.array.titles); 
    menuIcons = getResources().obtainTypedArray(R.array.icons); 

    rowItems = new ArrayList<RowItem>(); 

    for (int i = 0; i < menutitles.length; i++) { 
     RowItem items = new RowItem(menutitles[i], menuIcons.getResourceId(
       i, -1)); 

     rowItems.add(items); 
    } 

    adapter = new CustomAdapter(getActivity(), rowItems); 
    setListAdapter(adapter); 




} 




@Override 
public void onStart() { 
    super.onStart(); 

    // When in two-pane layout, set the listview to highlight the selected list item 
    // (We do this during onStart because at the point the listview is available.) 
    if (getFragmentManager().findFragmentById(R.id.article_fragment) != null) { 
     getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    } 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // This makes sure that the container activity has implemented 
    // the callback interface. If not, it throws an exception. 
    try { 
     mCallback = (OnHeadlineSelectedListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnHeadlineSelectedListener"); 
    } 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // Notify the parent activity of selected item 
    mCallback.onArticleSelected(position); 

    // Set the item as checked to be highlighted when in two-pane layout 
    getListView().setItemChecked(position, true); 
} 

}

public class ArticleFragment extends Fragment { 
final static String ARG_POSITION = "position"; 
int mCurrentPosition = -1; 

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

    // If activity recreated (such as from screen rotate), restore 
    // the previous article selection set by onSaveInstanceState(). 
    // This is primarily necessary when in the two-pane layout. 
    if (savedInstanceState != null) { 
     mCurrentPosition = savedInstanceState.getInt(ARG_POSITION); 
    } 

    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.activity_main, container, false); 
} 

@Override 
public void onStart() { 
    super.onStart(); 

    // During startup, check if there are arguments passed to the fragment. 
    // onStart is a good place to do this because the layout has already been 
    // applied to the fragment at this point so we can safely call the method 
    // below that sets the article text. 
    Bundle args = getArguments(); 
    if (args != null) { 
     // Set article based on argument passed in 
     updateArticleView(args.getInt(ARG_POSITION)); 
    } else if (mCurrentPosition != -1) { 
     // Set article based on saved instance state defined during onCreateView 
     updateArticleView(mCurrentPosition); 
    } 
} 

public void updateArticleView(int position) { 

} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    // Save the current article selection in case we need to recreate the fragment 
    outState.putInt(ARG_POSITION, mCurrentPosition); 
} 

}`

public class MainActivity_list extends FragmentActivity 
    implements HeadlinesFragment.OnHeadlineSelectedListener { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.news_articles); 

    // Check whether the activity is using the layout version with 
    // the fragment_container FrameLayout. If so, we must add the first fragment 
    if (findViewById(R.id.fragment_container) != null) { 

     // However, if we're being restored from a previous state, 
     // then we don't need to do anything and should return or else 
     // we could end up with overlapping fragments. 
     if (savedInstanceState != null) { 
      return; 
     } 

     // Create an instance of ExampleFragment 
     HeadlinesFragment firstFragment = new HeadlinesFragment(); 

     // In case this activity was started with special instructions from an Intent, 
     // pass the Intent's extras to the fragment as arguments 
     firstFragment.setArguments(getIntent().getExtras()); 

     // Add the fragment to the 'fragment_container' FrameLayout 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.fragment_container, firstFragment).commit(); 
    } 
} 

public void onArticleSelected(int position) { 
    // The user selected the headline of an article from the HeadlinesFragment 

    // Capture the article fragment from the activity layout 
    ArticleFragment articleFrag = (ArticleFragment) 
      getSupportFragmentManager().findFragmentById(R.id.article_fragment); 

    if (articleFrag != null) { 
     // If article frag is available, we're in two-pane layout... 

     // Call a method in the ArticleFragment to update its content 
     articleFrag.updateArticleView(position); 

    } else { 
     // If the frag is not available, we're in the one-pane layout and must swap frags... 

     // Create fragment and give it an argument for the selected article 
     ArticleFragment newFragment = new ArticleFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ArticleFragment.ARG_POSITION, position); 
     newFragment.setArguments(args); 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

     // Replace whatever is in the fragment_container view with this fragment, 
     // and add the transaction to the back stack so the user can navigate back 
     transaction.replace(R.id.fragment_container, newFragment); 
     transaction.addToBackStack(null); 

     // Commit the transaction 
     transaction.commit(); 
    } 
} 

大型XML

<?xml version="1.0" encoding="utf-8"?> 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<fragment android:name="com.example.android.fragments.HeadlinesFragment" 
      android:id="@+id/headlines_fragment" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 

<fragment android:name="com.example.android.fragments.ArticleFragment" 
      android:id="@+id/article_fragment" 
      android:layout_weight="2" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 

</LinearLayout> 

正常XML

<?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:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".HeadlinesFragment" > 



<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/fragment_container"> 






</FrameLayout> 

</LinearLayout> 
+0

'二进制XML文件行#23:错误充气类fragment'显示XML –

+0

我先加下面的答案xml文件 – gilione

+0

检查。 –

回答

0

包的名字是错的。 检查包中,你的类HeadlinesFragment存在

<?xml version="1.0" encoding="utf-8"?> 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<fragment android:name="com.chiari.nicola.myapplication.HeadlinesFragment" 
     android:id="@+id/headlines_fragment" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" /> 

    <fragment android:name="com.chiari.nicola.myapplication.ArticleFragment" 
     android:id="@+id/article_fragment" 
     android:layout_weight="2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" /> 

</LinearLayout> 
+0

我现在发现我的错误!我已经在大的xml文件中更改了pacchettto的名字....但是该应用程序崩溃了comuqne ...另一个错误... – gilione

+0

java.lang.IllegalArgumentException:必须使用MeasureSpec.EXACTLY测量DrawerLayout。 – gilione

0

你给错了包名参考你的XML。根据错误你的包名是

com.chiari.nicola.myapplication 

所以,在你的xml中,你给了com.example.android.fragments。您需要将其设置为您的软件包名称。您large.xml应该像下面

<?xml version="1.0" encoding="utf-8"?> 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<fragment android:name="com.chiari.nicola.myapplication.HeadlinesFragment" 
     android:id="@+id/headlines_fragment" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" /> 

    <fragment android:name="com.chiari.nicola.myapplication.ArticleFragment" 
     android:id="@+id/article_fragment" 
     android:layout_weight="2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" /> 

</LinearLayout>