0

В моем приложении есть меню слайдера, когда я нажимаю на элемент в меню, он отображает соответствующий фрагмент. У этого fragmet есть tablayout и viewpager. Фрагмент XML приведен нижеAndroid-пейджер не отображается Фрагмент при его вызове

<android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:background="@color/colorPrimary" 
     app:tabSelectedTextColor="@color/textColorPrimary" 
     app:tabTextColor="@color/colorAccent" 
     android:layout_height="wrap_content" 
     app:tabMode="fixed" 
     app:tabGravity="fill"/> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_below="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

Ниже приведен фрагмент код фрагмента нажал на меню ползунка

public class MyCoursesFragment extends Fragment { 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 

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

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


    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager()); 
     adapter.addFragment(new ScheduledFragment(), "SCHEDULED"); 
     adapter.addFragment(new LiveStreamingFragment(), "LIVE STREAMING"); 
     adapter.addFragment(new UpcomingFragment(), "UPCOMING"); 
     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 View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     Log.d("mlearning", "inside my course"); 
     View rootView = inflater.inflate(R.layout.fragement_courses, container, false); 
     viewPager = (ViewPager) rootView.findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) rootView.findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 

     return rootView; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
    } 

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

Есть три вкладки в приведенном выше фрагменте. Xml для каждого фрагмента содержит представление списка, xml приведен ниже.

<ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/lvList" 
     android:paddingLeft="10dp" 
     android:paddingTop="10dp" 
     android:backgroundTint="#888686" /> 

Код фрагмента tablayout приводится ниже:

public class ScheduledFragment extends Fragment { 

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

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


} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    Log.d("mlearning", "inside scheduled"); 
    View rootView = inflater.inflate(R.layout.fragment_scheduled, container, false); 
    ArrayList<CoursePojo> searchResults = GetSearchResults(); 

    final ListView lv1 = (ListView) rootView.findViewById(R.id.lvList2); 
    lv1.setAdapter(new MyCustomCourseList(getActivity(), searchResults)); 

    lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      Object o = lv1.getItemAtPosition(position); 
      CoursePojo fullObject = (CoursePojo) o; 
      //Toast.makeText(getBaseContext(), "You have chosen: " + " " + fullObject.getId(), Toast.LENGTH_LONG).show(); 


     } 
    }); 
    return rootView; 

} 
private ArrayList<CoursePojo> GetSearchResults(){ 
    ArrayList<CoursePojo> results = new ArrayList<CoursePojo>();CoursePojo coursePojo3=new CoursePojo(); 
    coursePojo3.setName("Android"); 
    coursePojo3.setDesc("First os was released without a phone "); 
    coursePojo3.setStartdate("20 Mar"); 
    coursePojo3.setEndDate("8 Apr"); 
    coursePojo3.setProgress("40"); 
    results.add(coursePojo3); 




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

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 

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

Первоначально, когда я нажимаю на фрагменте меню, значения во фрагменте вкладки приходит, как это упомянуто в коде. Но если я снова коснусь слайдера меню, элементы в макете вкладки не будут отображаться. А также некоторые вкладки пустые или некоторые вкладки имеют некоторое значение. Где я иду не так?

+0

вы используете фрагмент внутри getChildFragmentManager фрагмента вызова(). попробуйте эту строку кода.ViewPagerAdapter adapter = новый ViewPagerAdapter (getChildFragmentManager()); –

ответ

1

Используйте FragmentStatePagerAdapter мгновенно FragmentPagerAdapter.

+0

Спасибо sanjay, он сработал – Krishna

+0

Теперь у меня такая же проблема снова с тем же кодом – Krishna

+0

, должно быть что-то изменилось. в противном случае его рабочее право? –

0

Попробуйте заполнение данных в списке внутри onResume()

Смежные вопросы