How can I switch tabs using a spinner?

Asked

Viewed 198 times

0

I would like to implement the tabs change by a spinner I added inside Toolbar.

public class MainActivity extends FragmentActivity {  

/** 
 * The {@link android.support.v4.view.PagerAdapter} that will provide 
 * fragments for each of the sections. We use a 
 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which 
 * will keep every loaded fragment in memory. If this becomes too memory 
 * intensive, it may be best to switch to a 
 * {@link android.support.v4.app.FragmentStatePagerAdapter}. 
 */  
SectionsPagerAdapter    mSectionsPagerAdapter;  

/** 
 * The {@link ViewPager} that will host the section contents. 
 */  
ViewPager mViewPager;  

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

    // Create the adapter that will return a fragment for each of the three  
    // primary sections of the app.  
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());  

    // Set up the ViewPager with the sections adapter.  
    mViewPager = (ViewPager) findViewById(R.id.pager);  
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbarListaJogos);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

    Spinner sp = (Spinner) findViewById(R.id.spinner_nav);
    List<String> listaMenu = new ArrayList<>();
    listMenu.add("Section 1");
    listMenu.add("Section 2");
    listMenu.add("Section 3");


    ArrayAdapter<String> adapter = 
            new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, listaMenu);

    sp.setAdapter(adapter);

}  

@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
    // Inflate the menu; this adds items to the action bar if it is present.  
    getMenuInflater().inflate(R.menu.main, menu);  
    return true;  
}  

/** 
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
 * one of the sections/tabs/pages. 
 */  
public class SectionsPagerAdapter extends FragmentPagerAdapter {  

    public SectionsPagerAdapter(FragmentManager fm) {  
        super(fm);  
    }  

    @Override  
    public Fragment getItem(int position) {  
        // getItem is called to instantiate the fragment for the given page.  
        // Return a DummySectionFragment (defined as a static inner class  
        // below) with the page number as its lone argument.  
        Fragment fragment = new DummySectionFragment();  
        Bundle args = new Bundle();  
        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);  
        fragment.setArguments(args);  
        return fragment;  
    }  

    @Override  
    public int getCount() {  
        // Show 3 total pages.  
        return 3;  
    }  

    @Override  
    public CharSequence getPageTitle(int position) {  
        Locale l = Locale.getDefault();  
        switch (position) {  
        case 0:  
            return getString(R.string.title_section1).toUpperCase(l);  
        case 1:  
            return getString(R.string.title_section2).toUpperCase(l);  
        case 2:  
            return getString(R.string.title_section3).toUpperCase(l);  
        }  
        return null;  
    }  
}  

/** 
 * A dummy fragment representing a section of the app, but that simply 
 * displays dummy text. 
 */  
public static class DummySectionFragment extends Fragment {  
    /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */  
    public static final String ARG_SECTION_NUMBER = "section_number";  

    public DummySectionFragment() {  
    }  

    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
        View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false);  
        TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label);  
        dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)));  
        return rootView;  
    }  
}  

 }  

Follows the layout

<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/br.com.pixells.simuladorbr"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbarListaJogos"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#DC143C"
    app:subtitle="Teste"
    app:theme="@style/Theme.Abar.Widget"
    app:title="ToolBar">
    <Spinner
        android:id="@+id/spinner_nav"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
 </android.support.v7.widget.Toolbar> 

    <android.support.v4.view.ViewPager 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        tools:context=".MainActivity" >  


        <android.support.v4.view.PagerTitleStrip  
            android:id="@+id/pager_title_strip"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_gravity="top"  
            android:background="#33b5e5"  
            android:paddingBottom="4dp"  
            android:paddingTop="4dp" 
            android:textColor="#fff" />  


    </android.support.v4.view.ViewPager> 

  • Is it impossible to do this using this model of Tabs?

1 answer

0


To solve this problem I set the Viewpager setCurrentItem in the spinner system onIntemSelected method.

In this way:

		        Spinner sp = (Spinner) findViewById(R.id.spinner_nav);
		        List<String> listaMenu = new ArrayList<>();
		        listaMenu.add("Menu 1");
		        listaMenu.add("Menu 2");
		        listaMenu.add("Menu 3");
		        listaMenu.add("Menu 4");
		        
		        ArrayAdapter<String> adapter = 
		        		new ArrayAdapter<String>(ActListaJogos.this, android.R.layout.simple_spinner_dropdown_item, listaMenu);
		        
		        sp.setAdapter(adapter);
		        
		        sp.setOnItemSelectedListener((new OnItemSelectedListener() {

					@Override
					public void onItemSelected(AdapterView<?> parent, View view,
							int position, long id) {
						// TODO Auto-generated method stub
						mViewPager.setCurrentItem(position);
						
					}

					@Override
					public void onNothingSelected(AdapterView<?> parent) {
						// TODO Auto-generated method stub
						
					}
		        	
				})); 

  • I’m glad you solved your problem, but elaborate on the answer and mark it as resolved because your doubt today may turn out to be someone else’s tomorrow.

  • I’ll mark it as resolved, but the system only releases it to me the next day.

  • True, I’d forgotten that detail. But even so, better elaborate the answer, would help to better elucidate the problem so that the answer makes sense to anyone looking for this problem. Let us come and say that the question was not very well worded.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.