【问题标题】:Error inflating class fragment in activity layout在活动布局中膨胀类片段时出错
【发布时间】:2015-06-14 11:27:26
【问题描述】:

我有活动的布局:

    <fragment
        android:name="com.myapp.fragment1"
        android:id="@+id/fragment1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout="@layout/fragment1" />

    <fragment
        android:name="com.myapp.listfragment1"
        android:id="@+id/fragment2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

第一个片段 (fragment1) 扩展了 Fragment,而第二个片段扩展了 ListFragment。我没有 listfragment 的布局。

活动代码为:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_info);
}

setContentView 抛出异常:

膨胀类片段时出错

ListFragment 代码为:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setListAdapter(new MyListAdapter(getActivity(), prices));
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getListView().setDivider(null);
}

在一个活动中拥有多个片段的正确方法是什么?

【问题讨论】:

    标签: android android-layout android-fragments android-listfragment


    【解决方案1】:

    您可以使用SectionsPagerAdapter(滑动视图)或NavigationDrawer(导航抽屉)来完成。我为我的一个应用程序使用了滑动视图。这是代码。

    MainActivity.java

    public class MainActivity extends AppCompatActivity implements ActionBar.TabListener {
    
    
        SectionsPagerAdapter mSectionsPagerAdapter;
    
    
        /**
         * The {@link ViewPager} that will host the section contents.
         */
        ViewPager mViewPager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            // Set up the action bar.
            final ActionBar actionBar = getSupportActionBar();
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    
            // Create the adapter that will return a fragment for each of the three
            // primary sections of the activity.
            mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    
    
    
            // Set up the ViewPager with the sections adapter.
            mViewPager = (ViewPager) findViewById(R.id.pager);
            mViewPager.setAdapter(mSectionsPagerAdapter);
    
            // When swiping between different sections, select the corresponding
            // tab. We can also use ActionBar.Tab#select() to do this if we have
            // a reference to the Tab.
            mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    actionBar.setSelectedNavigationItem(position);
                }
            });
    
    
            //Getting icons in icons veriable
    
            final int[] ICONS = new int[]{
    
                    R.drawable.chat,
                    R.drawable.friends,
                    R.drawable.profile,
    
    
    
            };
    
            // For each of the sections in the app, add a tab to the action bar.
            for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
                // Create a tab with text corresponding to the page title defined by
                // the adapter. Also specify this Activity object, which implements
                // the TabListener interface, as the callback (listener) for when
                // this tab is selected.
                actionBar.addTab(
                        actionBar.newTab()
                                .setIcon(getResources().getDrawable(ICONS[i])).setTabListener(this));
            }
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Take appropriate action for each action item click
            switch (item.getItemId()) {
                case R.id.action_search:
                    // search action
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
    
        @Override
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
            // When the given tab is selected, switch to the corresponding page in
            // the ViewPager.
            mViewPager.setCurrentItem(tab.getPosition());
        }
    
        @Override
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        }
    
        @Override
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        }
    
        /**
         * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
         * one of the sections/tabs/pages.
         */
        public class SectionsPagerAdapter extends FragmentPagerAdapter {
    
            public SectionsPagerAdapter(FragmentManager fm) {
                super(fm);
            }
    
    
            @Override
            public Fragment getItem(int index) {
    
                switch (index) {
                    case 0:
                        // Top Rated fragment activity
                        return new ChatFragment();
                    case 1:
                        return new FriendsFragment();
                        // Games fragment activity
                        //return new ProfileFragment();
                    case 2:
                        // Movies fragment activity
                        //return new FriendsFragment();
                        return new ProfileFragment();
    
                }
    
                return null;
            }
    
            @Override
            public int getCount() {
                // Show 3 total pages.
                return 3;
            }
    
            @Override
            public CharSequence getPageTitle(int position) {
                Locale l = Locale.getDefault();
                switch (position) {
                    case 0:
                        return getString(R.string.chat_tab).toUpperCase(l);
                    case 1:
                        return getString(R.string.friends_tab).toUpperCase(l);
                    case 2:
                        return getString(R.string.profile_tab).toUpperCase(l);
                }
                return null;
            }
        }
    
        /**
         * A placeholder fragment containing a simple view.
         */
        public static class PlaceholderFragment extends Fragment {
            /**
             * The fragment argument representing the section number for this
             * fragment.
             */
            private static final String ARG_SECTION_NUMBER = "section_number";
    
            /**
             * Returns a new instance of this fragment for the given section
             * number.
             */
            public static PlaceholderFragment newInstance(int sectionNumber) {
                PlaceholderFragment fragment = new PlaceholderFragment();
                Bundle args = new Bundle();
                args.putInt(ARG_SECTION_NUMBER, sectionNumber);
                fragment.setArguments(args);
                return fragment;
            }
    
            public PlaceholderFragment() {
            }
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                return rootView;
            }
        }
    }
    

    FriendsFragment.java

    public class FriendsFragment extends Fragment {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
    
            View rootView = inflater.inflate(R.layout.fragment_friends, container, false);
    
            return rootView;
        }
    
    
        }
    

    activity_main.xml

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager"
        android:layout_width="match_parent" android:layout_height="match_parent"
        tools:context=".MainActivity" />
    

    fragment_main.xml

        <RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context=".MainActivity$PlaceholderFragment">
    
        <TextView 
            android:id="@+id/section_label" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </RelativeLayout>
    

    fragment_friends.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent" android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/email_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="@string/friends_tab"
            android:layout_gravity="center"
            android:gravity="center"/>
    
    </LinearLayout>
    

    这只是我项目的示例代码。您可以将自己的代码用于 java 或 xml。在这里,我尝试展示如何使用滑动视图调用 MainActivity 中的片段。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2016-07-21
      • 2016-10-30
      • 2018-06-22
      • 1970-01-01
      • 2011-09-19
      • 2013-05-28
      相关资源
      最近更新 更多