9

TabLayout und ViewPager - Klicken Sie auf Registerkarten funktioniert nicht nach dem Wischen zwischen verschiebbaren Schubladenelement.TabLayout und ViewPager -Tabs funktioniert nicht nach dem Wischen zwischen verschiebbaren Schubladenelementen

Ich arbeite auf App, die Schublade und Tablayout haben. Ich beziehe diese Tutorials For Sliding Drawer und For TabLayout.

Innen Gleitschublade

  1. Tasklist ->TabLayout(Tabs(Today,Monthly,Yearly))
  2. Einstellungen
  3. Orders

Ich habe Ausgabe zwischen Schublade und Tablayout. erste Zeit Viewpager lädt korrekt. aber wenn ich zum nächsten Schubladenelement wie (Einstellungsfragment) gehe, dann zurück zum TaskList-Register fragment viewager kann kein Fragment laden, wenn ich diesen Pager wische und dann ein paar Fragmente lade.

Hier Java-Code

public class TaskListFragment extends Fragment { 
private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 

public TaskListFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_my_page, container, false); 

    viewPager = (ViewPager)rootView.findViewById(R.id.viewpager); 
    tabLayout = (TabLayout)rootView.findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    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) { 

     } 
    }); 

    // Inflate the layout for this fragment 
    return rootView; 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager()); 
    adapter.addFragment(new Mypage_TodayFragment(), "TODAY"); 
    adapter.addFragment(new Mypage_TodayFragment(), "WEEKLY"); 
    adapter.addFragment(new Mypage_TodayFragment(), "MONTHLY"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 
@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
} 

Hier .XML-Code

<android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="262dp" 
     android:id="@+id/view" 
     android:layout_weight="0.16"> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="fixed" 
      app:tabGravity="fill" 
      app:tabBackground="@drawable/mytabselector" 
      app:tabIndicatorColor="@color/Orange" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="50dp" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

     </android.support.design.widget.CoordinatorLayout> 

Vielen Dank im Voraus !!

+3

Verwenden Sie 'FragmentStatePagerAdapter' anstelle von' F ragmentPagerAdapter' –

Antwort

13

dies Dies wird statt

ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());

tun

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());

Versuchen Sie, weil, da Sie eine viewpager in einem Fragment haben, dass diese viewpager das Fragment Manager zu machen verwenden sollten zu Fragmenttransaktionen sollten ein Childfragmentmanager sein

+2

Vielen Dank !! seine Arbeit für mich ... sagen Sie mir eine andere Sache getFragmentManager() nicht in AppCompatActivity ??? –

+0

Da Sie Fragmente in ein Fragment laden (d. H. Ihr Ansichtspager lädt Fragmente, und Ihr Ansichtspager selbst ist ein separates Fragment), müssen Sie den childfragmentmanager zum Ausführen von Fragmenttransaktionen verwenden. Sie sehen Aktivität ist der Elternteil und seine Fragmente sind seine Kinder, und Kinder können nicht den FragmentManager, FragmentManager ist für Aktivität, Kinder sollten den ChildFragmentManager verwenden – Bhargav