تصميم Custom BottomSheet وارسال بيانات الarray بداخله

تصميم Custom BottomSheet وارسال بيانات الarray بداخله


 تصميم Custom BottomSheet وارسال بيانات الarray بداخله

في هذا المقال سوف نتعرف على كيفية إنشاء وعمل  Custom BottomSheet في برنامج الاندرويد ستوديو بكل سهوله وببساطه حيث ان ال Custom BottomSheet من اكثر الاشياء التي عليها طلب كبير في التطبيقات وذلك لانه يعطي منظر مختلف في التطبيق ويحسن من المظهر العام الخاص بالتطبيق رغم سهوله انشاء وبساطته وفي مقال سابق شركنا لكم كيف تقوم بعمل  Custom BottomSheet ايضا بالشكل الذي ترغب به ولكن في مقالة اليوم سوف نقوم بعمل listView بداخله واستخدام العناصر من داخله .


Android Studio هو IDE الرسمي لبرمجة Android ويأتي مع كل ما تحتاجه للبدء. يسمح لك ConstraintLayout بإنشاء تخطيطات معقدة عن طريق ربط القيود من طريقة عرض إلى طرق عرض وإرشادات أخرى. بعد ذلك ، من خلال تحديد أحد تكوينات الجهاز المتعددة أو ببساطة تغيير حجم نافذة المعاينة ، قد ترى التخطيط الخاص بك على أي حجم شاشة. محلل لملفات APK افحص محتويات ملف APK للتطبيق الخاص بك لمعرفة طرق تقليل حجم تطبيق Android ، حتى لو لم يتم إنشاؤه باستخدام Android Studio. افحص ملف البيان ، بالإضافة إلى الموارد وملفات DEX. قارن بين ملفي APK لملاحظة كيفية تطور حجم التطبيق بمرور الوقت. 


إنشاء تصميم للCustom BottomSheet في الاندرويد

سوف تقوم بعمل عدد 2 layout واحده تحتوي على تصميم الbottom والاخر سوف تكون لعمل recycler لكي يتم تكرار العناصر بداخله وهذا ما نسعى له .


إنشاء تصميم للCustom BottomSheet في الاندرويد

انشاء DataModel لتغيير البيانات

هنا سوف تقوم بعمل DataModel تحتوي على البيانات التي سوف نقوم بتمريرها الى ملف الdataModel لتغير البيانات .


انشاء DataModel لتغيير البيانات

DataModel.java


public class DataTest2 {
    String name;

    public DataTest2(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


تهيئة ملف Adapter

في هذه المرحلة سوف نقوم بتهيئة ملف للadapter لكي نقوم بتمرير بيانات الrecycler بداخله .


تهيئة ملف Adapter

Adapter.java


public class AdapterTest2 extends RecyclerView.Adapter<AdapterTest2.Holder> {
    List<DataTest2> list;
    ClickSurah clickSurah;

    public AdapterTest2(List<DataTest2> list, ClickSurah clickSurah) {
        this.list = list;
        this.clickSurah = clickSurah;
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new Holder(DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()) , R.layout.list_prayer , parent , false));
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, @SuppressLint("RecyclerView") int position) {
        holder.binding.tv.setText(list.get(position).getName());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                clickSurah.click(position);
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class Holder extends RecyclerView.ViewHolder {
        ListPrayerBinding binding;
        public Holder(@NonNull ListPrayerBinding binding) {
            super(binding.getRoot());
            this.binding = binding;
        }
    }
}


امكانية الضغط على العنصر من داخل الrecyclerView

سوف نقوم بعمل interface لكي يساعدك على الضغط على العنصر .


امكانية الضغط على العنصر من داخل الrecyclerView

Click.Interface


public interface ClickSurah {
    void click(int position);
}


إنشاء class مخصص للBottomSheet

في هذه المرحلة سوف نقوم بعمل كلاس مخصص لاستخدام الBottomSheet وسوف يكون محتوي على التصميم الذي قمنا به بالاعلى وايضا سوف يتم كتابة المتغيرات بداخله وتعريفها واستخدامها .


إنشاء class مخصص للBottomSheet

BottomSheet.class


public class BottomSheet extends BottomSheetDialogFragment {
    List<DataTest2> list;
    ClickSurah clickSurah;

    public BottomSheet(List<DataTest2> list, ClickSurah clickSurah) {
        this.list = list;
        this.clickSurah = clickSurah;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        BottomSheetDialog bottomSheetDialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
        View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_bottom_sheet , null);
        bottomSheetDialog.setContentView(view);
        RecyclerView recyclerView = view.findViewById(R.id.recycler_bottom_sheet);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        AdapterTest2 adapterPrayer = new AdapterTest2(list ,new ClickSurah() {
            @Override
            public void click(int position) {
                clickSurah.click(position);
            }
        });
        recyclerView.setAdapter(adapterPrayer);
        RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(getContext() , DividerItemDecoration.VERTICAL);
        recyclerView.addItemDecoration(itemDecoration);

        return bottomSheetDialog;
   
}


استدعاء الCustom BottomSheet من الMainActivity

سوف نقوم هنا بعمل List من البيانات وارسالها الى الكلاس السابق الذي يحمل منا الlist وايضا سوف نرسل له الcontext واخيرا سوف نقوم بإستدعاء الdialog .


استدعاء الCustom BottomSheet من الMainActivity

MainActivity.class


public class PrayerActivity extends AppCompatActivity implements ClickSurah {
    ActivityPrayerBinding binding;
    List<DataTest2> list2;
    BottomSheet bottomSheet;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding= DataBindingUtil.setContentView(this,R.layout.activity_prayer);


        binding.btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                bottom_();
            }
        });
    }
    
 private void bottom_ () {
          
        list2 = new ArrayList<>();
        list2.add(new DataTest2("ahmed"));
        list2.add(new DataTest2("mohamed"));
        list2.add(new DataTest2("khaled"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));
        list2.add(new DataTest2("hamed"));

        bottomSheet = new BottomSheet(list2, this);
        bottomSheet.show(getSupportFragmentManager() , bottomSheet.getTag());
    }

    @Override
    public void click(int position) {
        Toast.makeText(this, list2.get(position).getName(), Toast.LENGTH_SHORT).show();
        bottomSheet.dismiss();
    }
}


مزيد من الدروس



تعليقات