استعمال ViewPager2 للتنقّل من layout لأخرى
ZaFaR97 • منذ 4 سنوات
السلام عليكم؛
أريد استعمال مكتبة ViewPager2 الجديدة للتنقّل بين صفحتين، لكل واحِد layout مختلف؛ بحثت عن شروحاتٍ شتّى لكنّي لم أستطع الوصول لنتيجة جيِّدة؛ أرجو ممن لديه مثال واضح طرحه هنا؛
- أعتذر، قد يكون السؤال بدائيّ جدًا، لكنّني عجزت ولم أفهم شرحًا واضحًا لهذا؛ وليست لدي خبرة سابقة في هذا الجانب.
MyFragmentActivity.java
public class MyFragmentActivity extends AppCompatActivity {
ViewPager2 viewPager;
@Override
protected void onStart() {
super.onStart();
setContentView(R.layout.fragment_layout);
viewPager = findViewById(R.id.pager);
TabLayout tabLayout = findViewById(R.id.tab_layout);
viewPager.setAdapter(createCardAdapter());
new TabLayoutMediator(tabLayout, viewPager,
(tab, position) -> {
if (position == 0) {
tab.setText("Tab1");
} else if (position == 1) {
tab.setText("Tab2");
}
}).attach();
}
private ViewPagerAdapter createCardAdapter() {
return new ViewPagerAdapter(this);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.fragment_layout);
}
}
ViewPagerAdapter
public class ViewPagerAdapter extends FragmentStateAdapter {
private static final int CARD_ITEM_SIZE = 2;
public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
@NonNull
@Override
public Fragment createFragment(int position) {
return CardFragment.newInstance(position);
}
@Override
public int getItemCount() {
return CARD_ITEM_SIZE;
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
}
CardFragment
/**
* A simple {@link Fragment} subclass.
* Use the {@link CardFragment#newInstance} factory method to
* create an instance of this fragment_card.
*/
public class CardFragment extends Fragment {
private static final String ARG_COUNT = "param1";
private Integer counter;
private int[] COLOR_MAP = {
R.color.colorAccent, R.color.colorPrimaryDark,
};
public CardFragment() {
// Required empty public constructor
}
public static CardFragment newInstance(Integer counter) {
CardFragment fragment = new CardFragment();
Bundle args = new Bundle();
args.putInt(ARG_COUNT, counter);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
counter = getArguments().getInt(ARG_COUNT);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment_card
return inflater.inflate(R.layout.fragment_card, container, false);
}
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(ContextCompat.getColor(getContext(), COLOR_MAP[counter]));
TextView textViewCounter = view.findViewById(R.id.tv_counter);
textViewCounter.setText("Fragment No " + (counter+1));
}
}
الإجابة الصحيحة
ZaFaR97 • منذ 4 سنوات
الحل ببساطة (اكتشفته بعد كتابة السؤال بـ 20 ثانية)
هو إضافة جملة شرطية في الدّالة التّالية في
@NonNull
@Override
public Fragment createFragment(int position) {
return CardFragment.newInstance(position);
}
// بحيث تصير مثلًا كالشكل التالي
@NonNull
@Override
public Fragment createFragment(int position) {
Fragment fragment;
if (position == 0){
fragment = CardFragment.newInstance(position);
} else {
fragment = CardTowFragment.newInstance(position);
}
return fragment;
}
ملف ViewPagerAdapter
الإجابات (1)
ZaFaR97 • منذ 4 سنوات
الحل ببساطة (اكتشفته بعد كتابة السؤال بـ 20 ثانية)
هو إضافة جملة شرطية في الدّالة التّالية في
@NonNull
@Override
public Fragment createFragment(int position) {
return CardFragment.newInstance(position);
}
// بحيث تصير مثلًا كالشكل التالي
@NonNull
@Override
public Fragment createFragment(int position) {
Fragment fragment;
if (position == 0){
fragment = CardFragment.newInstance(position);
} else {
fragment = CardTowFragment.newInstance(position);
}
return fragment;
}
ملف ViewPagerAdapter
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !