Разработка Android: Направление на конкретные вкладки во фрагменте

Так выглядит основное занятие. Щелкнув по каждому виду карты в основном задании, я перехожу ко второму заданию, в котором содержатся фрагменты с разметкой скользящей вкладки и видом повторного использования. Проблема, с которой я сталкиваюсь, - это попытка перенаправить каждое представление карты на свои собственные вкладки во втором упражнении, а не на вкладку по умолчанию, которая является первой. Я пытался смотреть на решения онлайн, но это не сильно помогло. Любая помощь будет высоко ценится, спасибо заранее.

Просто поясните, что намеренный вызов из первого основного действия ко второму действию осуществляется через адаптер.

Это основное занятие

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

3 ответа

Решение

В вашем намерении отправить данные вручную, какую позицию вкладки вы хотите отобразить, как показано ниже:

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

И в вашей деятельности два:

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

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

Я нашел решение, так как проблема была в намерениях, и он вызовет только последнее намерение, но прошло уже много времени с тех пор, как я опубликовал этот вопрос. В дополнение к решению 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;
            }
        }

Это позволило мне перейти на правильные вкладки.

Другие вопросы по тегам