2014-11-07 5 views
0

Привет, я создаю приложение, где должно быть несколько фрагментов только с listView и несколько с вкладками. Моя текущая версия работает, но имеет два действия: один заменяет отдельные фрагменты и другие вкладки хостинга. Есть ли возможность реализовать только одно действие со всеми видами фрагментов?Как реализовать приложение с одним действием, несколькими отдельными фрагментами и несколькими фрагментами с вкладками?

TabHost активность (пример):

public class TaskListActivity extends SherlockFragmentActivity { 

private ViewPager mViewPager; 
private TabsAdapter adapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    new AdvanceActionBar(this, this.getSupportActionBar()); 
    mViewPager = new ViewPager(this); 
    adapter = new TabsAdapter(this, mViewPager); 
    mViewPager.setAdapter(adapter); 
    mViewPager.setOnPageChangeListener(adapter); 


    mViewPager.setId(0x7F04FFF0); 

    mViewPager.setBackgroundColor(Color.parseColor("#ffffff")); 

    super.onCreate(savedInstanceState); 

    setContentView(mViewPager); 

    addTab("Do zrobienia", TaskListWaitingFragment.class, TaskListWaitingFragment.createBundle("Do zrobienia")); 
    addTab("Do wysłania", TaskListSendFragment.class, TaskListSendFragment.createBundle("Do wysłania")); 
    addTab("Weryfikacja", TaskListVerifyFragment.class, TaskListVerifyFragment.createBundle("Weryfikacja")); 
    addTab("Odrzucone", TaskListRejectedFragment.class, TaskListRejectedFragment.createBundle("Odrzucone")); 


} 

...

private class TabsAdapter extends FragmentPagerAdapter implements TabListener, ViewPager.OnPageChangeListener { 

    private final SherlockFragmentActivity mActivity; 
    private final ActionBar mActionBar; 
    private final ViewPager mPager; 

    /** 
    * @param fm 
    * @param fragments 
    */ 
    public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) { 
     super(activity.getSupportFragmentManager()); 
     this.mActivity = activity; 
     this.mActionBar = activity.getSupportActionBar(); 
     this.mPager = pager; 

     mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    } 

    @SuppressWarnings("rawtypes") 
    private class TabInfo { 
     public final Class fragmentClass; 
     public final Bundle args; 
     public TabInfo(Class fragmentClass, 
       Bundle args) { 
      this.fragmentClass = fragmentClass; 
      this.args = args; 
     } 
    } 

    @SuppressWarnings("rawtypes") 
    private List mTabs = new ArrayList(); 

    @SuppressWarnings({ "rawtypes", "unchecked" }) 
    public void addTab(CharSequence title, Class fragmentClass, Bundle args) { 
     final TabInfo tabInfo = new TabInfo(fragmentClass, args); 

     Tab tab = mActionBar.newTab(); 
     tab.setText(title); 
     tab.setTabListener(this); 
     tab.setTag(tabInfo); 

     mTabs.add(tabInfo); 

     mActionBar.addTab(tab); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     final TabInfo tabInfo = (TabInfo) mTabs.get(position); 
     return (Fragment) Fragment.instantiate(mActivity, tabInfo.fragmentClass.getName(), tabInfo.args); 
    } 

    @Override 
    public int getCount() { 
     return mTabs.size(); 
    } 

    public void onPageScrollStateChanged(int arg0) { 
    } 

    public void onPageScrolled(int arg0, float arg1, int arg2) { 
    } 

    public void onPageSelected(int position) { 
     mActionBar.setSelectedNavigationItem(position); 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     TabInfo tabInfo = (TabInfo) tab.getTag(); 
     for (int i = 0; i < mTabs.size(); i++) { 
      if (mTabs.get(i) == tabInfo) { 
       mPager.setCurrentItem(i); 
      } 
     } 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 
} 

Стандартная активность с фрагментами (пример):

public class CoreActivity extends SherlockFragmentActivity { 



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

    } 

    @Override 
    public void onResume() 
    { 
     MessageFragment frag = new MessageFragment(); 
      this.getSupportFragmentManager().beginTransaction() 
      .replace(R.id.fragment_container, frag) 
      .commit(); 

     super.onResume(); 
    } 

ответ

0

Вы можете использовать ActionBarSherlock это самый простой способ для достижения того, чего вы хотите.

Вы можете найти использование и примеры here.

+0

Я использую его, но как переключить его в действие? – Mattiah85

Смежные вопросы