آموزش List view سفارشی

 

 

برای ساخت لیست ویو سفارشی ابتدا یک لیست ویو به لایه xml اکتیویتی مورد نظرمان اضافه میکنیم

و یک آی دی به آن اختصاص میدھیم.

در مثال برنامه چون میخوایم یک لیست ویو بسازیم که ھر کدام از آیتم ھای آن شامل یک تصویر و دوتا تکست
ویو باشد ،

داخل پوشه layout یک لایه xml جدید (به ھمان روشی که قبلا آموزش داده شده) با نام دلخواه list می سازیم و ویجت
ھای مورد نظر را به آن اضافه میکنیم ،

خب حالا ما برای اینکه بتونیم بین این ویجت ھا و لیست ویو ارتباط برقرار کنیم احتیاجی
به یک کلاس Model داریم، روی پوشه پکیجتون راست کلیک کرده و روی new و سپس Class java کلیک کرده، یک نام
دلخواه مثلا Items تایپ کنید

و OK را بزنید تا کلاس ایجاد شود( دقت کنید که نام کلاس حتما باید با حرف بزرگ شروع شود)
خب حالا باید متغییرھای مد نظرمون رو به کلاس اضافه کنیم ،

که در این مثال ما ٣ تا متغییر وجود دارد (یک تصویر و ٢تا
تکست ویو) خب حالا باید  متد سازنده(Constructor (و متدھای And Getter
Setter را به کلاسمان اضافه کنیم ، کدھای نھایی کلاس به شکل زیر خواھد بود:

آموزش ساخت view List سفارشی در برنامه نویسی اندروید

public class Items {
 private String img;
 private String txtEnglish;
 private String txtPersion;
 public Items(String img, String txtEnglish, String txtPersion) {
 this.img = img;
 this.txtEnglish = txtEnglish;
 this.txtPersion = txtPersion;
 }
 public String getImg() {
 return img;
 }
 public void setImg(String img) {
 this.img = img;
 }
 public String getTxtEnglish() {
 return txtEnglish;
 }
 public void setTxtEnglish(String txtEnglish) {
 this.txtEnglish = txtEnglish;
 }
 public String getTxtPersion() {
 return txtPersion;
 }
 public void setTxtPersion(String txtPersion) {
 this.txtPersion = txtPersion;
 }
}

خب کارمون با این کلاس تموم شد حالا باید بریم و یک آداپتر بسازیم ، برای ساخت آداپتر باید یک کلاس جدید با نام دلخواه مثلا
Adapter بسازیم خب این کلاس ما باید از یک آداپتر extends شود که ما در اینجا ازBaseAdapter استفاده میکنیم

خب بعد از عملیات ارث بری لازمه که متد مورد نظر Implement شود  خب حالا لازمه دو
متغییر به کلاس اضافه کنیم یکی از نوع Context و با نام دلخواه cntx و دیگری یک اری لیست از نوع Items) یعنی نوع

کلاسی که خودمان ساختیم) و با نام دلخواه item .

بعد از اینکار باید متد سازنده را به ھمان روش قبلی فراخوانی کنیم، کدھای
کلاس ما تا به اینجای کار به شکل زیر خواھند بود:

public class Adapter extends BaseAdapter {
 private Context cntx;
 private ArrayList<Items> item;
 public A(Context cntx, ArrayList<Items> item) {
 this.cntx = cntx;
 this.item = item;
 }
 @Override
 public int getCount() {
 return 0;
 }
 @Override
 public Object getItem(int i) {
 return null;
 }
 @Override
 public long getItemId(int i) {
 return 0;
 }
 @Override
 public View getView(int i, View view, ViewGroup viewGroup) {
 return null;
 }
}

متد اولی (getCount (عمل شمارش آیتم ھا را انجام میدھد در نتیجه باید size.item را برای ما برگرداند،

متد بعد (getItem (مربوط به مکان یا شماره آیتم موردنظر است در نتیجه باید مقدار (i(get.item را برای ما برگرداند،
متد بعدی آی دی ھر کدام ازآیتم ھا را برمیگرداند، متد آخر ھم که متد اصلی ماست

و پردازش اطلاعات ما برعھده این متد است ،
خب طبق آموزشی که درفیلم میبینید این متدھا را تکمیل میکنیم تا در نھایت به کد ھای زیر برسیم:

class Adapter extends BaseAdapter {
 private Context cntx;
 private ArrayList<Items> item;
 public Adapter(Context cntx, ArrayList<Items> item) {
 this.cntx = cntx;
 this.item = item;
 }
 @Override
 public int getCount() {
 return item.size();
 }
 @Override
 public Object getItem(int i) {
 return item.get(i);
 }
 @Override
 public long getItemId(int i) {
 return i;
 }
 @Override
 public View getView(int i, View view, ViewGroup viewGroup) { 
 if (view == null) {
 view = LayoutInflater.from(cntx).inflate(R.layout.list, viewGroup,
false);
 }
 Items MyItems = (Items) getItem(i);
 CircleImageView imgItem = view.findViewById(R.id.cirimg);
 TextView txtItemEnglish = view.findViewById(R.id.txt_name);
 TextView txtItemPersian = view.findViewById(R.id.txt_message);
 txtItemEnglish.setText(MyItems.getTxtEnglish());
 txtItemPersian.setText(MyItems.getTxtPersion());
 String Uri = "@drawable/" + MyItems.getImg();
 int imageSource = cntx.getResources().getIdentifier(Uri, null,
cntx.getPackageName());
 imgItem.setImageDrawable(ResourcesCompat.getDrawable(cntx.getResources(),
imageSource, null));
 return view;
 }
}

خب ٣تا متد اولی رو که توضیح دادم فقط مونده کدھایی که در متد آخری اضافه کردیم،

درخط اول یک شرط گذاشتیم که تا وقتی
view برابر null بود ینی تا زمانی که صفحه اکتیویتی جا برای ضافه شدن آیتم جدید داشت توسط LayoutInflater یک آیتم
جدید به لیست ویو اضافه کند.
در خط بعدی یک شی جدید از کلاس Items ایجاد کردیم تا توسط (i(getItem موقعیت آیتم ھای فعلی که در حال اضافه شدن به
لیست ویو ھست را مشخص کند. در ٣ خط بعدی اومدیم عمل کستینگ را برای ویجت ھا انجام دادیم

و در خط ھای بعدی عمل
انتقال داده به ویجت را انجام دادیم.
خب تا ایجا کارمون با کلاس آداپتر ھم تموم شد حالا باید بریم سراغ کلاس جاوای اون اکتیویتی که قرار لیست ویو ما

را نمایش دھد، خب اول اجازه بدین کد ھای کامل شده را بنویسیم و بعد توضیح میدم:

 

 CircleImageView circleImage;
 ListView List;
 ArrayList<Items> arrayList;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_fehrest);
 List = (ListView) findViewById(R.id.list_view);
 arrayList = new ArrayList<>();
 final Adapter adp = new Adapter(this, arrayList);
 arrayList.add(new Items("bag", "A New Bag", "یک کیف جدید ;(( "
 arrayList.add(new Items("hard", "Hard to Shop For ", "سختھ خرید کردن برای "
)); 
 arrayList.add(new Items("birthday", "Birthday Present for Mom", "کادوی تولد
 ;(( "مادر برای
 arrayList.add(new Items("losing", "Losing Weight", "کم کردن وزن ;(( "
 arrayList.add(new Items("getajob", "Get a Job", "برو سر کار ;(( "
 arrayList.add(new Items("smart", "Smartwatch ", "ساعت ھوشمند ;(( "
 List.setAdapter(adp);
 }
}

خب اول اومدیم لیست ویو را تعریف و عمل کست کردن را انجام دادیم

سپس یک اری لیست از نوع کلاسمان (Items (و با نام
دلخواه arrayList ساختیم

و در قسمت پایین یک شی جدید از کلاس Adapter با نام دلخواه adp ساختیم و در داخل پرانتز دو
پارامتر از ما میخواد که اولی مربوط به context میشه که برابر this قرار دادیم

و پارامتر بعدی اسم اری لیست رو از ما میخواد
که arrayList را وارد میکنیم

در خطھای بعدی اومدیم و با اون خط کدھا آیتم ھای مورد نظرمان را به لیست ویو اضافه کردیم

که قسمت اولش مربوط به اسم تصویر ماست، قسمت دوم و سوم ھم مربوط به Textview ھاست.
و در آخر ھم با خط کد
(adp(setAdapter.List آداپتر ساخته شده را برای لیست ویو ست میکنیم

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

همچنین ببینید:

اسکریپت فارسی کوتاه کننده لینک AdLinkFly

مجموعه بک درآپ کودک ویژه تولد ۲ سالگی یا ماهگرد

مدیر سایت

86 مطلب منتشر شده

درباره این مطلب نظر دهید !