ساخت Dynamic Adapter (آموزش + نمونه کد اضافه شد)
میخوام یک 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; } }




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

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

کار خیلی ساده ایه، فقط کافیه شما یک 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; }
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .