9

TabLayout e ViewPager - Fare clic sulle schede non funziona dopo aver fatto scorrere l'elemento del cassetto scorrevole.TabLayout e ViewPager -Tabs non funziona dopo lo scorrimento tra gli elementi del cassetto scorrevole

Io lavoro su app che hanno cassetto scorrevole e Tablayout. Mi riferisco a questo tutorial For Sliding Drawer e For TabLayout.

All'interno scorrevole cassetti

  1. Tasklist ->TabLayout(Tabs(Today,Monthly,Yearly))
  2. Impostazioni
  3. Ordini

ho questione tra cassetto scorrevole e Tablayout. prima volta che viewpager viene caricato correttamente. ma quando mi sposto alla voce successiva del cassetto come (Frammento impostazioni) dopo di che tornare al frammento della scheda TaskList viewpager non posso caricare alcun frammento, quando scorri il cercapersone e carica pochi frammenti.

Qui codice Java

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(); 
} 

Qui .XML Codice

<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> 

Grazie in anticipo !!

+3

Utilizzare 'FragmentStatePagerAdapter' invece di' F ragmentPagerAdapter' –

risposta

13

Prova a modificare di

ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());

fare

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());

Questo perché dal momento che si dispone di un viewpager in un frammento, il manager frammento che questo viewpager dovrebbe usare per fare le transazioni di frammenti dovrebbero essere un gestore di childfragment

+2

Grazie mille !! il suo lavoro per me ... dimmi un'altra cosa getFragmentManager() non funziona in AppCompatActivity ??? –

+0

dal momento che si caricano frammenti in un frammento (ovvero, il proprio cercapersone di visualizzazione carica frammenti e il proprio cercapersone di visualizzazione stesso è un frammento separato) è necessario utilizzare il gestore childfragment per eseguire transazioni di frammento. Vedete l'attività è il genitore ei suoi frammenti sono i suoi figli, ei bambini non possono usare il frammentManager, fragmentManager è per l'attività, i bambini dovrebbero usare il childFragmentManager – Bhargav

Problemi correlati