2016-04-04 3 views
1

Ich habe drei Registerkarten. Zwei von ihnen erweitern Fragment und die dritte Registerkarte erweitert FragmentActivity. Wie implementiert man die getItem() Methode?wie Fragment und Fragmentaktivität in der gleichen Methode zurückgeben?

public class UpdatesFragment extends FragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.updates_layout); 

     if (savedInstanceState == null) { 
      addRssFragment(); 
     } 
    } 

    private void addRssFragment() { 
     FragmentManager manager = getSupportFragmentManager(); 
     FragmentTransaction transaction = manager.beginTransaction(); 
     RssFragment fragment = new RssFragment(); 
     transaction.add(R.id.fragment_container, fragment); 
     transaction.commit(); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean("fragment_added", true); 
    } 
} 

public class TabFragment extends Fragment { 

    public static TabLayout tabLayout; 
    public static ViewPager viewPager; 
    public static int int_items = 3; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     /** 
     *Inflate tab_layout and setup Views. 
     */ 
     View x = inflater.inflate(R.layout.tab_layout,null); 
     tabLayout = (TabLayout) x.findViewById(R.id.tabs); 
     viewPager = (ViewPager) x.findViewById(R.id.viewpager); 

     /** 
     *Set an Apater for the View Pager 
     */ 
     viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 

     /** 
     * Now , this is a workaround , 
     * The setupWithViewPager dose't works without the runnable . 
     * Maybe a Support Library Bug . 
     */ 

     tabLayout.post(new Runnable() { 
      @Override 
      public void run() { 
        tabLayout.setupWithViewPager(viewPager); 
      } 
     }); 

     return x; 
    } 
} 

class MyAdapter extends FragmentPagerAdapter{ 

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

    /** 
    * Return fragment with respect to Position . 
    */ 
    @Override 
    public Fragment getItem(int position) 
    { 
     switch (position){ 
      case 0 : return new PrimaryFragment(); 
      case 1 : return new SocialFragment(); 
      case 2: return new UpdatesFragment(); 
     } 

    return null; 
    } 

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

    /** 
    * This method returns the title of the tab according to the position. 
    */ 

    @Override 
    public CharSequence getPageTitle(int position) { 

     switch (position){ 
      case 0 : 
       return "Primary"; 
      case 1 : 
       return "Social"; 
      case 2 : 
       return "Updates"; 
     } 
      return null; 
    } 
} 

Antwort

0

Fragment und FragmentActivity beide sind verschiedene Dinge. Wir können Fragment innerhalb eines FragmentActivity einschließen. Aber Sie können FragmentActivity nicht als Fragment verwenden. Wenn Sie UpdatesFragment in Ihrem ViewPager verwenden möchten, dann erweitern Sie es von Fragment.