2

Вот как выглядит Main Activity. Нажав на каждый вид карты в основном действии, он доведёт меня до Activity two, который содержит фрагменты со скользящей компоновкой вкладок и recyclerview. Проблема, с которой я сталкиваюсь, заключается в том, чтобы перенести каждый вид карты на свои собственные вкладки во втором действии, а не на вкладку по умолчанию, которая является первой. Я пробовал искать решения в Интернете, но это не помогло. Любая помощь была бы высоко оценена, спасибо заранее.Разработка 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; 
    } 
} 

ответ

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

     } 
    }); 
+0

Большое вам спасибо, что сработало для меня. Однако, если бы я захотел применить тот же процесс к другим вкладкам, например, если в школу щелкнул, он должен забрать меня в школу. –

+0

Если вы хотите школу, напишите намерение.putExtra («позиция», 2); и если вы хотите свою последнюю вкладку, напишите aim.putExtra («позиция», 3); – Drv

+0

Если бы мой ответ был полезным, отметьте его как принятый. – Drv

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

Привет, это не имеет никакого значения в результате перехода на конкретную вкладку, например. колледжи, нажавшие на основной вид деятельности, должны получить меня на вкладке колледжей во второй активности. Благодарю вас. –

+0

хорошо, можете ли вы опубликовать код, когда вы вызываете второе действие? – johnrao07

+0

все в порядке, проблема решена. Благодарю вас. –

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

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

Смежные вопросы