【问题标题】:Android Development: Directing to specific tabs in fragmentAndroid开发:定向到片段中的特定选项卡
【发布时间】:2016-07-20 12:12:31
【问题描述】:

这就是Main Activity 的样子。通过单击主要活动中的每个卡片视图,它会将我带到Activity two,它包含带有滑动选项卡布局和回收器视图的片段。我遇到的问题是试图将每个卡片视图引导到第二个活动中自己的特定选项卡,而不是第一个活动的默认选项卡。我尝试在线查看解决方案,但没有太大帮助。任何形式的帮助将不胜感激,在此先感谢。

澄清一下,从第一个主要活动到第二个活动的意图调用是通过适配器完成的。

这是主要活动

public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private CoverAdapter adapter;
private List<Covers>    coversList;

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

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

    initCollapsingToolbar();

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

    coversList = new ArrayList<>();
    adapter = new CoverAdapter(this, coversList);

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);

    prepareCovers();

    try {
        Glide.with(this).load(R.drawable.cover).into((ImageView) findViewById(R.id.backdrop));
    } catch (Exception e) {
        e.printStackTrace();
    }


}

private void prepareCovers() {
    int[] covers = new int[]{
            R.drawable.school};
    Covers academiaCover = new Covers("Universities",covers[0]);
    coversList.add(academiaCover);

    academiaCover = new Covers("Colleges", covers[0]);
    coversList.add(academiaCover);

    academiaCover = new Covers("School", covers[0]);
    coversList.add(academiaCover);

    academiaCover = new Covers("Others", covers[0]);
    coversList.add(academiaCover);

    adapter.notifyDataSetChanged();


}

private void initCollapsingToolbar() {
    final CollapsingToolbarLayout collapsingToolbar =
            (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
    collapsingToolbar.setTitle(" ");
    AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
    appBarLayout.setExpanded(true);

    // hiding & showing the title when toolbar expanded & collapsed
    appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        boolean isShow = false;
        int scrollRange = -1;

        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
            if (scrollRange == -1) {
                scrollRange = appBarLayout.getTotalScrollRange();
            }
            if (scrollRange + verticalOffset == 0) {
                collapsingToolbar.setTitle(getString(R.string.app_name));
                isShow = true;
            } else if (isShow) {
                collapsingToolbar.setTitle(" ");
                isShow = false;
            }
        }
    });
}

这是第二个活动

public class ActivityTwo extends AppCompatActivity {

private Toolbar toolbar;
private ViewPager mPager;
private SlidingTabLayout mTabs;
private static  final int UNIVERSITES   = 0;
private static  final int COLLEGES      = 1;
private static  final int SCHOOLS       = 2;
private static  final int OTHERS        = 3;
public static ProgressBar       spinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_two);
    toolbar = (Toolbar) findViewById(R.id.tool_bar);
    setSupportActionBar(toolbar);                 // Setting toolbar as the ActionBar with setSupportActionBar() call
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    toolbar.setTitleTextColor(Color.WHITE);
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
    mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
    mTabs.setViewPager(mPager);

    spinner = (ProgressBar)findViewById(R.id.progress_bar);
    spinner.setVisibility(View.GONE);


}

class MyPagerAdapter extends FragmentPagerAdapter {
    String[] tabs;
    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
        tabs=getResources().getStringArray(R.array.tabs);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment myFragment = null;

        switch (position){
            case UNIVERSITES:
                myFragment = FragmentUniversities.newInstance("","");
                break;

            case COLLEGES:
                myFragment = FragmentColleges.newInstance("","");
                break;

            case SCHOOLS:
                myFragment = FragmentSchool.newInstance("","");
                break;
            case OTHERS:
                myFragment = FragmentOthers.newInstance("","");
                break;

        }

        return myFragment;

    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabs[position];
    }

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

【问题讨论】:

    标签: java android android-fragments main-activity android-tabstrip


    【解决方案1】:

    在您的意图中手动发送数据您想要显示的选项卡位置如下:

       Intent intent=new Intent(YOUR_ACTIVITY_CONTEXT,ActivityTwo.class);
       //give whichever position you want to set for ex: 0 for clicking universities or 1 for clicking colleges and so on.
       intent.putExtra("position",1);
       YOUR_ACTIVITY_CONTEXT.startActivity(intent);
    

    在你的 ActivityTwo 中:

       mPager.setCurrentItem(getIntent().getIntExtra("position",0));
    

    添加以下行以获取各个选项卡的页面:

      mTabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                mPager.setCurrentItem(tab.getPosition());
            }
    
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
    
            }
    
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
    
            }
        });
    

    【讨论】:

    • 非常感谢,这对我有用。但是,如果我想将相同的过程应用于其他选项卡,例如,如果点击学校,它应该带我去学校。
    • 如果你想上学,写intent.putExtra("position",2);如果你想要你的最后一个标签,写 intent.putExtra("position",3);
    • 再次非常感谢您。非常感谢您的帮助!
    • 我直到现在才尝试这个,它似乎没有工作。我所做的是:intent.putExtra("position",1); intent.putExtra("位置",2); intent.putExtra("位置",3); context.startActivity(intent);以及如何设置 mPager.setcurrenitem... 以使其正常工作,例如按 uni > 转到 uni 选项卡,按大学 > 带你到大学选项卡,> 按学校 > 带你去学校选项卡。
    • 您的 SlidingTabLayout 是自定义视图扩展 TabLayout?
    【解决方案2】:
    switch (position) {
            case 0:
                FragmentUniversities tab1 = new FragmentUniversities();
                return tab1;
            case 1:
                FragmentColleges tab2 = new FragmentColleges();
                return tab2;
            case 2:
                FragmentSchool tab3 = new FragmentSchool();
                return tab3;
    
            case 3:
                FragmentOthers tab4 = new FragmentOthers();
                return tab4;
    
            default:
                return null;
        }
    

    【讨论】:

    • 嗨,进入特定标签的结果没有任何区别,例如点击主要活动的大学应该让我进入第二个活动的大学标签。还是谢谢你。
    • 好的,你可以在调用第二个活动时发布代码吗?
    【解决方案3】:

    我找到了解决方案,因为问题出在意图上,它只会调用最后一个意图,但自从我发布这个问题以来已经有一段时间了。 除了 Drv 的解决方案之外,我还做了一个 for 循环并将意图放入其中。

    //give whichever position you want to set for ex: 0 for clicking universities or 1 for clicking colleges and so on.
            for(int i =0; i <=coverlist.size(); i++){
                if(getAdapterPosition()==0){
                    intent.putExtra("position",0);
                    context.startActivity(intent);
                    break;
                }else if (getAdapterPosition()==1){
                    intent.putExtra("position",1);
                    context.startActivity(intent);
                    break;
                }
                else if (getAdapterPosition()==2){
                    intent.putExtra("position",2);
                    context.startActivity(intent);
                    break;
                }else{
                    intent.putExtra("position",3);
                    context.startActivity(intent);
                    break;
                }
            }
    

    这让我可以导航到正确的标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-14
      • 2018-06-29
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多