Android 开发:定向到片段中的特定选项卡

Android Development: Directing to specific tabs in fragment

这就是 Main Activity looks like. By clicking on each cardview in the main activity it takes me to Activity two 使用滑动标签布局和 recyclerview 保存片段的方式。我遇到的问题是试图将每个 cardview 定向到第二个 activity 中它自己的特定选项卡,而不是第一个默认选项卡。我尝试在网上查看解决方案,但没有太大帮助。任何形式的帮助将不胜感激,提前致谢。

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

这是主要的Activity

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;
            }
        }
    });
}

这是第二个activity

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;
    }
}
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;
    }

在您手动发送数据的意图中,您希望在哪个选项卡位置显示如下:

   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) {

        }
    });

我找到了解决方案,因为问题出在意图上,它只会调用最后一个意图,但自从我发布这个问题以来已经有一段时间了。 除了 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;
            }
        }

这使我能够导航到正确的选项卡。