2

这就是Main 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;
            }
        }
    });
}

这是第二个活动

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

3 回答 3

1
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;
    }
于 2016-07-20T12:21:53.260 回答
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) {

        }
    });
于 2016-07-20T12:22:22.463 回答
0

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

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

于 2016-09-06T14:27:23.027 回答