0

Ich bin neu in Android App Entwicklung und ich arbeite derzeit an einem Projekt, NavigationDrawer mit TabBarLayout haben. Mein Problem ist, dass ich ein Fragment hatte aus zwei Schaltfläche Login und Registrierung:viewpager.setCurretntItem() at button onClickListener

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

       fragmentManager=getActivity().getSupportFragmentManager(); 
       fragmentTransaction=fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.containerView,new TabFragment()).addToBackStack(null).commit(); 
      } 
     }); 

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

       fragmentManager=getActivity().getSupportFragmentManager(); 
       fragmentTransaction=fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.containerView,new TabFragment()).addToBackStack(null).commit(); 
      } 
     }); 

Jetzt, wenn ich bei der Anmeldung klicken oder die Taste Tabbar Layout geöffnet registrieren. Nun möchte ich, dass, wenn ich auf Login-Schaltfläche klicken, Login-Fragment im Tabbar-Layout angezeigt wird, und wenn ich auf Register-Schaltfläche klicken, Registrierung Fragment ist in der Tableiste geöffnet.

ich dafür und viewpager.setCurrentItem auf Google-Suche auch finden, aber ich bin nicht in der Lage, dass ähnliche

ich für meine Anforderung

public class TabFragment extends Fragment { 

    public static TabLayout tabLayout; 
    public static ViewPager viewPager; 
    public static int int_items = 2 ; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     View x=inflater.inflate(R.layout.tab_layout,null); 

     tabLayout=(TabLayout)x.findViewById(R.id.tabs); 
     viewPager=(ViewPager)x.findViewById(R.id.viewpager); 

     viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 

     viewPager.setCurrentItem(1); //here i am unable to decide how to open specific fragment 

     tabLayout.post(new Runnable() { 
      @Override 
      public void run() { 

       tabLayout.setupWithViewPager(viewPager); 
      } 
     }); 
     return x; 
    } 
    class MyAdapter extends FragmentPagerAdapter{ 

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

     @Override 
     public Fragment getItem(int position) { 
      switch (position) 
      { 
       case 0: return new Login(); 
       case 1: return new Registration(); 

      } 

      return null; 
     } 

     @Override 
     public int getCount() { 
      return int_items; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) 
      { 
       case 0: 
        return "Login"; 
       case 1: 
        return "Registration"; 
      } 
      return null; 
     } 
    } 

verwenden verwenden Sie mir bitte einige Logik andeuten, das zu tun ... Danke im Voraus ...

Antwort

0

Übergeben Sie einen Boolean mit der Schaltfläche klicken Sie auf und erhalten Sie in der TabFragment.

überprüfen Sie die boolean und stellen Sie den sachgemäßen viewpager Artikel:

erste im Register und Login-Button Wert Fragment Pass zu bestimmen, welche Schaltfläche geklickt wird

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

       fragmentManager=getActivity().getSupportFragmentManager(); 
       Bundle bundle=new Bundle(); 
       bundle.putBoolean("Register",false); 
       TabFragment fragment=new TabFragment(); 
       fragment.setArguments(bundle); 
       fragmentTransaction=fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.containerView,fragment).addToBackStack(null).commit(); 
      } 
     }); 

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


       fragmentManager=getActivity().getSupportFragmentManager(); 
       Bundle bundle=new Bundle(); 
       bundle.putBoolean("Register",true); 
       TabFragment fragment=new TabFragment(); 
       fragment.setArguments(bundle); 
       fragmentTransaction=fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.containerView,fragment).addToBackStack(null).commit(); 
      } 
     }); 

Und danach in Tabbar Layout diesen Code verwenden, um boolesche Werte berücksichtigen gilt pr falsch

@Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     View x=inflater.inflate(R.layout.tab_layout,null); 

     tabLayout=(TabLayout)x.findViewById(R.id.tabs); 
     viewPager=(ViewPager)x.findViewById(R.id.viewpager); 

     viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 


     Bundle bundle=getArguments(); 
     check=bundle.getBoolean("Register"); 
     if (check) 
     { 
      viewPager.setCurrentItem(1); 
     } 

     tabLayout.post(new Runnable() { 
      @Override 
      public void run() { 

       tabLayout.setupWithViewPager(viewPager); 
      } 
     }); 
     return x; 
    } 
+0

und wie für die Schaltfläche diese bool true – Manish

+0

zu berücksichtigen ist, dass Ihr logic.Say für Login butto ist n Sie setzen den Booleschen Wert auf true und für die Registrierung auf false. Überprüfen Sie dann den booleschen Wert und starten Sie den entsprechenden viewpager-Eintrag. – kgandroid

+0

danke für deine antwort, aber ich frage login und register taste sind in einer anderen fragmentseite und wie ich mein tabbar layout sagen, welche taste geklickt ist, um bestimmte login oder registrieren seite .... – Manish