2017-06-24 14 views
1

Ich versuche eine Anwendung zu erstellen, die einen ähnlichen Rahmen wie Snapchat hat, wo ich drei Bildschirme habe, die durchgeschlipst werden können. Ich habe drei Bildschirme (mit jeweils einem Fragment) und möchte auf Knopfdruck auf einen Bildschirm gleiten. Nur um klar zu sein, ich habe eine Tabelle auf einem Bildschirm, von dem eine Zeile anklickbar ist und eine Funktion hat, die onClick() aufruft. Ich möchte mit der erwähnten Funktion zum gewünschten Fragment rutschen.Wechsel zu einem Fragment aus einem Fragment onClick()

Fragment.Java:

public class ChatFragment extends Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.chat_fragment_layout, container, false); 
     rootView.findViewById(R.id.row0).setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       openfrag("1"); 
      } 
     }); 
     rootView.findViewById(R.id.row1).setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       openfrag("2"); 
      } 
     }); 
     rootView.findViewById(R.id.row2).setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       openfrag("3"); 
      } 
     }); 

     return rootView; 
    } 
    private void openfrag(String number){ 
    } 

ich durch die Verwendung eines PagerAdapter durch die Fragmente, die klauen FragmentPagerAdapter erstreckt:

public class PagerAdapter extends FragmentPagerAdapter { 

    public PagerAdapter(FragmentManager fm) { 
     super(fm); 

    } 

    @Override 
    public Fragment getItem(int arg0) { 
     switch (arg0) { 
      case 0: 

       return new MessageFragment(); 
      case 1: 
       return new ChatFragment(); 
      case 2: 
       return new CameraFragment(); 
      default: 
       break; 
     } 
     return null; 
    } 

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

I ersetzen die Methode mit fragmentmanager versucht haben, aber das ist nicht was ich will, ich will es so tun, als ob ich zu diesem Fragment geklaut hätte. Danke für die Hilfe.

+0

Verwenden Sie 'Schnittstelle' und machen Sie calllack in' Activity'. –

Antwort

0

Sie können einfach verwenden Sie diesen bestimmten Code

 String tag = "android:switcher:" + R.id.pager + ":" + 0; 
     AddStudentFragment f = (AddStudentFragment) getActivity().getSupportFragmentManager().findFragmentByTag(tag); 
     String tag1 = "android:switcher:" + R.id.pager + ":" + 1; 
     AssignSubjectFragment a = (AssignSubjectFragment) getActivity().getSupportFragmentManager().findFragmentByTag(tag1); 
0

Ich konnte es mit einem kleinen Zusatz zu meinem MainActivity Klasse außerhalb der onCreate Methode zu arbeiten. Wann immer Sie zu einem anderen Fragment in Ihrem Pager wechseln müssen, rufen Sie einfach diese Funktion mit dem Item-Index und True/False auf, je nachdem, ob Sie den Scroll-Effekt glätten wollen oder nicht.

public void setCurrentItem (int item, boolean smoothScroll) { 
     mViewPager.setCurrentItem(item, smoothScroll); 
    }