آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ساخت Dynamic Adapter (آموزش + نمونه کد اضافه شد)

Hajhosseini  10 سال پیش  10 سال پیش
+9 0

میخوام یک Adapter بسازم که مقادیر ورودیش یک آرایه باشه ( از هر نوعی و کاملا داینامیک ) ، و یک View ورودی داشته باشه که به صورت داینامیک بسازدش، در کل میخوام یک Adapter بسازم که بشه توی هر برنامه ای هرچندتا که میخوایم ازش استفاده کنیم که نیازی به ساخت 2-3 بار در برنامه نباشه.
توی کلاس Adapter که extends ArrayAdapter باشه میشه اینو پیاده سازی کرد، فقط کافیه View و Array رو به عنوان پارامتر ورودی تعریف کنیم به جای اینکه ویو رو استاتیک و آرایه رو در کلاس G تعریف کنیم، ولی اینجوری که من تحقیق کردم راه اصولیش استفاده از کلاس Adapter که extends BaseAdapter هست که خودش ویو های مختلف رو ساپورت میکنه.
از هر گونه نظر ، پاسخ ، کد نمونه استقبال میشه

 public class FullSupportAdapter extends BaseAdapter {

    @Override
    public int getCount() {
        return 0;
    }


    @Override
    public Object getItem(int arg0) {
        return null;
    }


    @Override
    public long getItemId(int arg0) {
        return 0;
    }


    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        return null;
    }

}
+1 0
نظر بالا بصورت اشتباهی توسط اینجانب بجای vote شدن ، اسپم شد ، از جناب حاج حسینی عذرخواهی میکنم. (10 سال پیش)
+3 0
آختیار داری Sprit جان، مشکلی نیست، فکر نکنم بشه اسپم رو حذف کرد پس دوباره درج میکنم. راه حل : استفاده از Generic Type کلاس رو که کامل نوشتم و تست شد اینجا سورسشو میذارم، نیازی به استفاده از BaseAdapter نیست و همون ArrayList کفایت میکنه، وقت کنم توضیحات کامل رو درج میکنم. (10 سال پیش)
0 0
شما تونستی این آداپتر داینامیک رو بسازی؟ (10 سال پیش)
 برای این سوال 3 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
Hossein Kurd  10 سال پیش
+2 0

Array Adapter و Cursor Adapter زیرشاخه Base Adapter هستند تایپ های راکی اونها رو ببین

 

این لینک رو هم ببین

پاسخ به سوال 
Hajhosseini  10 سال پیش
+3 0

 پاسخ صحیح

راجع به عملکرد ArrayAdapter,BaseAdapter,CursorAdapter توضیحات کاملی میدم.
1 - زمانی که بخوایم یک آرایه از دیتا که از دیتابیس گرفتیم رو به Adapter انتقال بدیم از CursorAdapter استفاده میکنیم.
2 - زمانی که بخوایم یک آرایه از نوع دلخواهی که میخوایم رو (مثل StructCategorie) به Adapter انتقال بدیم از ArrayAdapter استفاده میکنیم.
3 - و اما زمانی که Adapter ما شامل چند نوع ویو مختلف هست، مثلا زمانی که چند Pattern برای نمایش با تعداد ویو های مختلف وجود دارد از BaseAdapter استفاده میکنیم.و نیازی نداریم چند Adapter مختلف یا چند بار یک Adapter رو Call کنیم.

0 0
یعنی برای اینکه در هر آیتم چند دیزاین دیزاین داشته باشی از BaseAdapter استفاده می کنی؟ (10 سال پیش)
+1 0
دقیقا همینطوره، حتی میتونه View ها با هم متفاوت باشه، باید توی متد getView تعریف کنیم که کدوم ویو مال کدوم دیزاینه. (10 سال پیش)
پاسخ به سوال 
Hajhosseini  10 سال پیش
+1 0

کار خیلی ساده ایه، فقط کافیه شما یک ArrayList به این Adapter بدید و دیتا رو به هر نوعی که میخواید Cast کنید، حتی داینامیک کردن آداپتر Recycle View هم به همین صورت هست و شما میتونید به راحتی توی کل برنامتون از یک آداپتر استفاده کنید.(در فرگمنت ها هم کاربرد داره)

 public class FullSupportAdapter<T> extends ArrayAdapter<T> {

    public int          layoutId;
    public ArrayList<T> array;

    public FullSupportAdapter(ArrayList<T> arrayList, int layoutId ) {
        super(G.context, layoutId, arrayList);

        this.layoutId = layoutId;
        array = arrayList;
    }

    private class ViewHolder {
        // Main Item_Main (ActivityMain Views)
        TextView itemMainTxtPlace;

        public ViewHolder(View view) {

            switch (layoutId) {
                case R.layout.item_main: {
                    itemMainTxtPlace = (TextView) view.findViewById(R.id.itemMainTxtPlace);
                    break;
                } 
            }
        }
        public void fill(T item,int position) {
            switch (layoutId) {
                case R.layout.item_main: {
                    StructContests contests = (StructContests) item;

                    itemMainTxtPlace.setText(contests.place);
                    break;
                }

            }
        }
    }


    @SuppressWarnings("unchecked")
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        T item = getItem(position);
        if (convertView == null) {
            convertView = G.inflater.inflate(layoutId, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.fill(item,position);
        return convertView;
    }

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .