2017-01-30 11 views
0

TabLayoutとスワイプでないアイコンViewPagerを使用してアイコンの下にタブを作成しました。私が望むのは、特定のタブ(ここではposition == 2)をクリックするとActivityを開くことです。他のタブはそのままFragmentを開きます。特定のタブでアクティビティを開く

これを行う方法はありますか?

public class MainActivity extends AppCompatActivity { 

    private TabLayout tabs; 
    private NonSwipeViewPager viewpager; 

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

     tabs = (TabLayout)findViewById(R.id.tabs); 
     viewpager = (NonSwipeViewPager)findViewById(R.id.viewpager); 
     viewpager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager(), MainActivity.this)); 
     viewpager.setPagingEnabled(false); 
     tabs.setupWithViewPager(viewpager); 
     setupTabIcons(); 
    } 

    public class SampleFragmentPagerAdapter extends FragmentPagerAdapter { 
     final int PAGE_COUNT = 5; 
     private Context context; 

     public SampleFragmentPagerAdapter(FragmentManager fm, Context context) { 
      super(fm); 
      this.context = context; 
     } 

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

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return new HomeFragment(); 
       case 1: 
        return new CategoryFragment(); 
       case 2: 
        return new AddProdFragment(); 
       case 3: 
        return new MyProdFragment(); 
       case 4: 
        return new MyProfileFragment(); 
       default: 
        return null; 
      } 
     } 
    } 

    private void setupTabIcons() { 
     tabs.getTabAt(0).setIcon(R.drawable.home_white); 
     tabs.getTabAt(1).setIcon(R.drawable.category_white); 
     tabs.getTabAt(2).setIcon(R.drawable.upload_white); 
     tabs.getTabAt(3).setIcon(R.drawable.listing_white); 
     tabs.getTabAt(4).setIcon(R.drawable.user_white); 
    } 
} 

答えて

0
mTabHost.setOnTabChangedListener(new OnTabChangeListener() { 

     public void onTabChanged(String tabId) { 
      Log.d(debugTag, "onTabChanged: tab number=" + mTabHost.getCurrentTab()); 

      switch (mTabHost.getCurrentTab()) { 
      case 0: 
       //do what you want when tab 0 is selected 
       break; 
      case 1: 
       //do what you want when tab 1 is selected 
       break; 
      case 2: 
       //do what you want when tab 2 is selected 
       break; 

      default: 

       break; 
      } 
     } 
    }); 

タブをクリックリスナーのためにこれを使用してください。

+0

MenuItemsと似ていますか? –

+0

mTab​​Host.getCurrentTab()でタブ位置を取得し、必要に応じてフラグメントをロードします。 –

0

タブスイッチでActivityを開くことはお勧めできません。しかし、とにかく、あなたはこのようなことをすることができます。

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      return new HomeFragment(); 
     case 1: 
      return new CategoryFragment(); 
     case 2: 
      Intent intent = new Intent(context, AddProdActivity.class); 
      startActivity(intent); 
      return new AddProdFragment(); 
     case 3: 
      return new MyProdFragment(); 
     case 4: 
      return new MyProfileFragment(); 
     default: 
      return null; 
    } 
} 
+0

エラー '仮想メソッドを呼び出そうとしています 'java.lang.Class nullオブジェクト参照のjava.lang.Object.getClass()' @Reaz – Sammy

+0

@sam新しいオブジェクトを作成するときに有効なコンテキストを渡す必要があります意図。あなたが 'Activity'にいるなら、あなたはこのような意図を作成する必要があります。 - 'Intent intent = new Intent(YourActivity.this、AddProdActivity.class);' –

+0

そして、 'null'ではなく' AddProdFragment'を返します。あなたはnull値を扱っていないので。編集された答えをご覧ください。 –

関連する問題