یک لیست آداپتر برای همیشه

سلام

در اینجا کلاسی را نوشتم که میتونید از اون برای ساخت لیست آداپتر ها استفاده کنید تا یک سری کارهای تکراری رو دیگه انجام ندید :

 

یک کلاس جاوای جدید به اسم MyHelperAdapter بسازید و کد های بالا را در آن کپی کنید .
public abstract class MyHelperAdapter<T> extends BaseAdapter {

    protected List<T> items;

    public MyHelperAdapter() {
        this.items = new ArrayList();
    }

    public MyHelperAdapter(List<T> items) {
        this.items = items;
    }

    public void setItems(List<T> newItems) {
        this.items.clear();
        this.items.addAll(newItems);
        notifyDataSetChanged();
    }

    public void addMoreItems(List<T> newItems) {
        this.items.addAll(newItems);
        notifyDataSetChanged();
    }

    public void removeAllItems() {
        this.items.clear();
        notifyDataSetChanged();
    }


    @Override
    public int getCount() {
        return this.items.size();
    }

    @Override
    public T getItem(int i) {
        return items.get(i);
    }

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

}
نحوه استفاده :

 

 

class ListViewAdapter extends MyHelperAdapter<Extraprice>{
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder  viewHolder;
            if(convertView==null){
                convertView=LayoutInflater.from(getActivity()).inflate(R.layout.customer_list_item, null);
                viewHolder= new ViewHolder();
                viewHolder.name = (TextView) convertView.findViewById(R.id.customerListItem_name);
                viewHolder.bourseCode = (TextView) convertView.findViewById(R.id.customerListItem_bourseCode);
                convertView.setTag(viewHolder);
            }else{
                viewHolder= (ViewHolder) convertView.getTag();
            }
            ExtraPrice extraPrice = getItem(position);
            viewHolder.name.setText(extraPrice.typeID);
            viewHolder.bourseCode.setText(extraPrice.price);

            return convertView;
        }

        class ViewHolder{
            TextView name;
            TextView bourseCode;
        }
}

خوب در یکی از صفحات نیاز به یک آداپتر دارم ، به راحتی از کلاس MyHelperAdapter به ارث می بریم
نوع آبجکتی که قراره در لیست قرار داده شود را هم داخل <> می نویسیم
MyHelperAdapter

حالا دیگه فقط کافیه تا متد getView() رو بنویسید.

همانطور که در بالا می بینید کد ها خلاصه شده و متد های تکراری حذف شده اند.

چند نکته برای استفاده بهتره :
وقتی که نیاز به آبجکتی از لیست که در آن ردیف در حال نمایش است داریم باید از آداپتر متد getItem(position) را فراخوانی کنیم ، به این صورت آداپتر از لیستی که درون خود دارد ، بر اساس ایندکسی که قرار گرفته است (position) ، آبجکت مورد نظر را برمیگرداند .
همانطور که در مثال می بینید

ExtraPrice extraPrice = getItem(position);
viewHolder.name.setText(extraPrice.typeID);
viewHolder.bourseCode.setText(extraPrice.price);

در قسمتی که قصد مقدار دهی به تکست ویو های لیست داریم ، با getItem(position) آبجکت مورد نظر را گرفته و از آن استفاده می کنیم

نکته : نوع آبجکتی که getItem بر می گرداند همان نوعی است که در ابتدا داخل <> گذاشته بودیم
MyHelperAdapter

این لیست آداپتر ۳ متد کاربردی دارد :
setItems(لیستی از آبجکت های مورد نظر برای نمایش در لیست)
یک لیست از آبجکت ها (همان نوعی که از قبل مشخص کرده بودیم) می گیرد و درون لیست نمایش می دهد
اگر از قبل لیست دیگر وجود داشته آن ها را پاک کرده و لیست جدید را جایگزین می کند

addMoreItems(لیستی از آبجکت های مورد نظر برای نمایش در لیست)
به لیستی که از قبل وجود داشته مقادیر جدید را اضافه و لیست ویو را بروز رسانی می کند

removeAllItems()
تمام لیست را خالی می کند

نمونه استفاده ازآداپتر ساخته شده :

        ListViewAdapter listViewAdapter;
        ListView listView;

        listView = (ListView) rootView.findViewById(R.id.switchCustomer_listView);
        listViewAdapter = new ListViewAdapter();
        listView.setAdapter(listViewAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                String bourseCode = ((ListViewAdapter) parent.getAdapter()).getItem(position).price;
                Toast.makeText(getActivity(),bourseCode,Toast.LENGTH_LONG).show();
            }
            
        });
برچسب ها:
پست قبلی
پست بعدی

درباره ایلیا عابدینی

برنامه نویس اندروید و کارشناس مهندسی پزشکی، نفر سوم مسابقه برنامه نویسی اندروید http://www.schallenge.ir ، از سال 92 برنامه نویسی اندروید رو شروع کردم و در حال حاضر در شرکت عصر دانش در حال توسعه اپلیکیشن تجارت پی می باشدم ، این وبلاگ رو ساختم تا تجربیات روزانه و مفید خودم رو داخل اون بزارم. رزومه : iact.ir/cv

4 دیدگاه

  1. با سلام

    این امکان وجود دارد که کدهای برنامه نویسی اندروید را ب صورت اماده تهیه کنیم و در مواقع لازم کپی کنیم

    ب طور مثال کد فرگمنت را از قبل اماده را کپی کنیم و بعد ی صفحه اینترنتی وب ویو را داخل اون اماده قرار بدهیم

    بعد خودش کامپایل بشه

    ممنون میشم ج بدهید واقعا لازم دارم

  2. سلام من کد بالا را متوجه نشدم

    من یه تابع دارم که هر اطلاعاتی در جدول دارم را برام میریزه توی یه لیست از نوع مدلم

    اول اومدم همین لیست را نشون دادم ولی چون میخوام به صورت جدول نشون بدم و مثلا اطلاعات فیلد اول همه اش زیر هم باشه اومدم یه لیست ویو دلخواه درست کردم ولی نمیدونم بعدش چیکار کنم

     

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نمی شود.علامت دارها لازمند. *

*

رفتن به بالا