简体   繁体   中英

Android - Open 3rd Tab from Intent fired from Dialog in Fragment

I have ALr.java class and FragHandler. FragHandler has Tablayout and viewpager. ALR and FragHandler code is writtern below. I want to open Settings tab which is third tab in FragHandler from click on ALR ie rl.setonclicklisterner by calling activatealert method.

MyFragHandler Class

public class FragHandler extends AppCompatActivity 
    TabLayout tabLayout;
    Toolbar customtoolbar;
    SharedPreferences sharedPreferences;

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

        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);



        tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText("1"));
        tabLayout.addTab(tabLayout.newTab().setText("2"));
        tabLayout.addTab(tabLayout.newTab().setText("Settings"));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);




        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final AlsViewChanger adapter = new AlsViewChanger(getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);

        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });


    }





}

and my ALR.java from where I m trying to open tab 3.

public class ALR extends Fragment  {


    TextView rl, 




    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) throws NullPointerException {
        View view = inflater.inflate(R.layout.ar, container, false);



        rl = (TextView) view.findViewById(R.id.reto);


               rl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                    activatealert();

                });    
    public void activatealert() {
        MaterialDialog activateald = new MaterialDialog.Builder(getActivity())
                .content("In order to use these services, please click settings and set appropriate options to activate Where R U feature.")
                .title("Activate Where R U")
                .positiveColor(Color.BLUE)
                .negativeColor(Color.RED)
                .positiveText("Settings")
                .negativeText("Cancel")
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                        Intent intent = new Intent(getActivity(),FragHandler.class);
                        intent.putExtra("Settings",2);
                        startActivity(intent);

                    }
                })
                .show();
    }
}

it opens tabbed activitiy but First Tab not third as required. Pls guide.

Edit Based on your code:

remove the OnTabSelectedListener , you don't need it.

just add

tabLayout.setupWithViewPager(viewPager);

Here's the full code:

public class FragHandler extends AppCompatActivity 
    TabLayout tabLayout;
    Toolbar customtoolbar;
    SharedPreferences sharedPreferences;

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

        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText("1"));
        tabLayout.addTab(tabLayout.newTab().setText("2"));
        tabLayout.addTab(tabLayout.newTab().setText("Settings"));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final AlsViewChanger adapter = new AlsViewChanger(getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);

        tabLayout.setupWithViewPager(viewPager);
        int tabToSelect = getIntent().getIntExtra("Settings”, 0);
        viewPager.setCurrentItem(tabToSelect);
    }

}

Please check the

int tabToSelect = getIntent().getIntExtra("Settings”, 0);

I just assumed if you wanted to do so. Change it according if you don't need it.

It's hard to answer without much details, but here are my few suggestion based on assumptions:

1) You want to start an activity FragHandler which has multiple tabs. TabLayout is associated with ViewPager . so in that case, after you set adapter to ViewPager , call viewPager.setCurrentItem(2) . If you have only tabs, then you can try tabLayout.getTabAt(2).select() . This should trigger your OnTabSelectedListener where you might already have code for replacing fragment.

2) The fragment which is having dialog is inside the same TabLayout where 3rd tab you are asking for is. In this case put the following code in onClick of settings button:

// If ViewPager, then make it public in YourActivity
((YourActivity)getActivity()).viewPager.setCurrentItem(2);

// If TabLayout without ViewPager, then also make it public
((YourActivity)getActivity()).tabLayout.getTabAt(2).select();

And post as much details as possible so that you can get correct answer

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM