【问题标题】:Drawer navigation with Tabs带标签的抽屉导航
【发布时间】:2015-02-23 20:37:10
【问题描述】:

谷歌搜索了三天。无法自拔。我有导航抽屉和片段,除了片段中的标签外,一切都很完美。这是 MainActiviti 类的一部分...

case R.id.linearLayoutHome:
        fragment = new HomeFragment();
        break; //this one works well

case R.id.linearLayoutHome:
        fragment = new CategoryFragment(); //error showing here
        break; //this one doesn't work

调用片段...

FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();

完美运行的主页片段:

public class HomeFragment extends Fragment {
public HomeFragment() {
}

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

}

CategoryFragment 不起作用。我认为这是因为片段中的片段:

public class CategoriesActivity extends Fragment {

SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;

public CategoriesActivity(){
}

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

    mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());

    mViewPager = (ViewPager) rootView.findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    return rootView;
}

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = new DummySectionFragment();
        Bundle args = new Bundle();
        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
        case 0:
            return getString(R.string.title1).toUpperCase(l);
        case 1:
            return getString(R.string.title2).toUpperCase(l);
        }
        return null;
    }
}

public static class DummySectionFragment extends Fragment {

    public static final String ARG_SECTION_NUMBER = "section_number";

    public DummySectionFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_tabbed_dummy, container, false);
        TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label);
        dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));
        return rootView;
    }
}

}

我需要一些解决方案。没有更多的想法。

【问题讨论】:

  • 你遇到崩溃了吗,NPE,你运行它时到底发生了什么??
  • 你的类叫“CategoriesActivity”,不应该是“CategoryFragment”吗?除非您没有向我们展示您的 CategoryFragment 课程。
  • 甚至无法启动应用程序。错误出现:case R.id.linearLayoutHome: fragment = new CategoryFragment(); //错误显示在这里 break;

标签: java android android-fragments tabs navigation-drawer


【解决方案1】:

第 1 步: 你的onCreateView() 应该是这样的:

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

并将此方法添加到您的 Fragment:

@Override
public void onViewCreated(View view, Bundle savedInstanceState){
    mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
    mViewPager = (ViewPager) view.findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
}

第 2 步: 确保您的 Activity 扩展自 FragmentActivityActionBarActivity

第 3 步: 确保您使用的是android.support.v4.app.Fragment 而不是android.app.Fragment

【讨论】:

  • 我在代码中出现错误:“类型不匹配:无法从 CategoriesActivity 转换为 Fragment”... 甚至无法启动应用程序。但我在几分钟前就解决了这个问题。还是非常感谢。问题是我在 CategoriesActivity 中使用了 android.support.v4.app.Fragment ,在 HomeActivity 中使用了 android.app.Fragment 以及调用碎片粉碎的方法。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
相关资源
最近更新 更多