2015-02-23 192 views
0

谷歌搜索三天。不能幫助自己。我有導航抽屜和片段,除了片段中的標籤外,一切都很完美。這是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; 
    } 
} 

} 

我需要一些解決方案。沒有更多的想法。

+0

過得好崩潰,NPE的,當你運行它到底發生了什麼? – 2015-02-23 21:38:07

+0

你的班級被稱爲「CategoriesActivity」,不應該是「CategoryFragment」?除非你沒有向我們展示你的CategoryFragment類。 – ekchang 2015-02-23 21:39:05

+0

甚至不能啓動應用程序。錯誤是: case R.id.linearLayoutHome: fragment = new CategoryFragment(); //錯誤在這裏顯示 break; – Arnes 2015-02-24 07:42:40

回答

1

STEP 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); 
} 

STEP 2: 確保您ActivityFragmentActivityActionBarActivity延伸。

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

+0

我做了你所說的,但錯誤仍然一樣。 – Arnes 2015-02-24 07:48:22

+0

後logcat錯誤的崩潰 – 2015-02-24 08:03:24

+0

我在代碼錯誤:「類型不匹配:無法從CategoriesActivity轉換爲片段」...甚至無法啓動應用程序。 但是我幾分鐘前就已經解決了這個問題。不管怎樣,謝謝你。問題在於我在HomeActivity的CategoriesActivity和android.app.Fragment中使用了android.support.v4.app.Fragment,並且調用了碎片的方法。 :) – Arnes 2015-02-24 08:20:56