【问题标题】:Getting the number of the Current Tab in Tabbed Activity获取选项卡式活动中当前选项卡的编号
【发布时间】:2018-05-10 19:48:56
【问题描述】:

首先,我是 Android 开发新手,非常感谢您的帮助。

我在 android studio 中有一个选项卡式活动,并且我有一个 FloatingActionButton 可以在选项卡式活动的每个片段中添加一个项目。然后这个按钮会调用一个新的 Activty,我想将标签 Number 传递给新的 Activity,以便我可以将它存储在数据库中。

如何获取生成新活动的选项卡编号?

下面是代码:

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


      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
      setSupportActionBar(toolbar);

      mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());


      mViewPager = (ViewPager) findViewById(R.id.container);
      mViewPager.setAdapter(mSectionsPagerAdapter);

      TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

      mViewPager.addOnPageChangeListener(new 
     TabLayout.TabLayoutOnPageChangeListener(tabLayout));
     tabLayout.addOnTabSelectedListener(new 
     TabLayout.ViewPagerOnTabSelectedListener(mViewPager));


      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
      fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent startNewPostActivity = new Intent(getApplicationContext(), NewPostActivity.class);
            startNewPostActivity.putExtra("Fragment_Position", position_fragment);   

            startActivity(startNewPostActivity);
        }
    });



}

为了获得这个职位,我做了以下事情: 设置 position_fragment = position; 但是这会返回错误的选项卡编号。

公共类 SectionsPagerAdapter 扩展 FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
         position_fragment = position;  // not good
        return PlaceholderFragment.newInstance(position);
    }

    @Override
    public int getCount() {
        // Show 5 total pages.
        return 5;
    }
}

}

【问题讨论】:

    标签: android android-tabbed-activity


    【解决方案1】:

    试试这个:

    fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                Intent startNewPostActivity = new Intent(getApplicationContext(), NewPostActivity.class);
                startNewPostActivity.putExtra("Fragment_Position", mViewPager.getCurrentItem());   
    
                startActivity(startNewPostActivity);
            }
        });
    

    【讨论】:

    • 这真的很快,更重要的是它奏效了。正是我想要的。非常感谢你的帮助。很快就会将其标记为正确答案!
    • 太棒了 :) 很高兴能帮到你 ;)
    【解决方案2】:

    您可以从这些 switch case 中识别您的标签 ID,并在里面调用必要的函数

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    viewPager.setCurrentItem(tab.getPosition());//setting current selected item over viewpager
                    switch (tab.getPosition()) {
                        case 0:
                            //Log.e("TAG","TAB1");
                            break;
                        case 1:
                            //Log.e("TAG","TAB2");
                            break;
                        case 2:
                            //Log.e("TAG","TAB3");
                            break;
                        case 3:
                            //Log.e("TAG","TAB4");
                            break;
                        case 4:
                            //Log.e("TAG","TAB5");
                            break;
                        case 5:
                            //Log.e("TAG","TAB6");
                            break;
                        case 6:
                            //Log.e("TAG","TAB7");
                            break;
                    }
                }
    
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
                }
    
                @Override
                public void onTabReselected(TabLayout.Tab tab) {
                }
            });
    

    【讨论】:

    • 感谢您帮助我
    【解决方案3】:

    有两种方法可以获取 Tabbed Activity 中当前 Tab 的数量

    1.使用ViewPager.getCurrentItem()

    返回将保留到处于空闲状态的视图层次结构中当前页面的任一侧的页面数。默认为 1。

    示例代码

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    
            Intent startNewPostActivity = new Intent(getApplicationContext(), NewPostActivity.class);
            startNewPostActivity.putExtra("Fragment_Position", mViewPager.getCurrentItem());   
    
            startActivity(startNewPostActivity);
        }
    

    2.使用TabLayout.addOnTabSelectedListener()

    添加一个 TabLayout.OnTabSelectedListener 将在选项卡选择更改时调用。 示例代码

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                int position = tab.getPosition();
            }
    
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
    
            }
    
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
    
            }
        });
    

    【讨论】:

    • 非常感谢您的回答。欣赏!
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2014-09-12
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多