2017-01-30 75 views
0

我使用TabLayout和非刷卡ViewPager创建了图标底部的标签。我想要的是打开一个Activity点击一个特定的标签(这里position == 2)。其他选项卡将按照原样打开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

在mTabHost.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 java.lang.Object.getClass()'reference' @Reaz – Sammy

+0

@sam你需要传递,当你创建一个新的有效上下文意图。如果您在“活动”中,则需要像这样创建意图。 - '意图intent =新的意图(YourActivity.this,AddProdActivity.class);' –

+0

然后,返回'AddProdFragment'而不是'null'。因为你没有处理空值。请参阅编辑的答案。 –

相关问题