میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

adapter اختصاصی در اندروید

برای مدیریت تخصیص داده و پشتیبانی از چندین view در اندروید ، می بایست خود یک کلاس adapter با پیاده سازی اختصاصی تعریف نمایید.

برای این منظور ابتدا لازم است یک کلاس پیاده سازی شده ی adapter را به ارث ببرید و یا به طور مستقیم از کلاس BaseAdapter یک کلاس فرزند ایجاد کرده و بدنه ی آن را خود پیاده سازی کنید.

توجه: اغلب توسعه دهنده از کلاس ArrayAdapter ارث بری کرده و یک adapter اختصاصی پیاده سازی می کند. این کار به مراتب ساده تر از ایجاد کلاس فرزند و ارث بری مستقیم از BaseAdapter است.

 


آماده سازی سطر از لیست

Adapter می بایست به ازای هر سطر از لیست، یک layout ایجاد کند. آبجکت (ListView (instance متد ()getView را برای هر المان در لیست ، در سطح کلاس Adater صدا می زند. به واسطه ی این متد layout adapter مربوط به سطر را ایجاد کرده و داده ها را به view های مربوطه در layout نگاشت می کند.

این root معمولا یک  ViewGroup ( یک layout manager ) است که خود میزبان چندین view دیگر می باشد. به عنوان مثال می توان از ImageView و TextView نام برد. تصویر زیر یک لیست را با layout های متفاوت برای سطرهای زوج و فرد نشان می دهد.

Adapter

 

متد () getView فایل XML را خوانده و آن را به listview تبدیل می کند.

حال با استفاده از متد () getView فایل layout مبتنی بر XML خود را بارگذاری یا inflate کرده و سپس محتوای تک تک viewهای سطر مورد نظر را بر اساس آبجکت جاوا تنظیم می کنید (آن ها را با داده هایی از آبجکت جاوا پر می کنید). به منظور inflate کردن فایل layout مبتنی بر XML خود، می توانید از سرویس LayoutInflator استفاده نمایید.

توجه: این سرویس که layout ها را خوانده و در حافظه بارگذاری می کند ( inflate) به راحتی به واسطه ی فراخوانی متد () getLayoutInflator در سطح کلاس activity و یا فراخوانی متد context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) به راحتی قابل دسترسی می باشد.

پس از اینکه adapter فایل layout مربوطه را در حافظه بارگذاری و به اصطلاح inflate کرد، view های متناظر در layout را پیدا می کند و متعاقبا آن ها را با داده پر می نماید. همان طور که قبلا نیز به آن اشاره شده، جهت پیدا کردن المان های فردی در layout ، کافی است متد () findViewById را بر روی view ) top level view میزبان که view مورد نظر در آن تعریف شده است ) فراخوانی نمایید.

 


نمونه ای از پیاده سازی یک adapterاختصاصی و custom

کد زیر بدنه ی یک کلاس adapter با پیاده سازی اختصاصی را نشان می دهد. این آبجکت adapter فرض می گیرد شما دو فایل تصویری nopng ) png و  ok.png ) در یکی از پوشه های directory]]res/drawable خود دارید. کد نوشته شده در این adapter فایل XML layout را در حافظه بارگذاری ( inflate ) کرده view های مربوطه را در layout پیدا می کند و سپس محتوای آن ها را بر اساس داده های ورودی مقداردهی و تنظیم می نماید.

 

package de.vogella.android.listactivity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MySimpleArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MySimpleArrayAdapter(Context context, String[] values) {
super(context, -۱, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
textView.setText(values[position]);
// change the icon for Windows and iPhone
String s = values[position];
if (s.startsWith("iPhone")) {
imageView.setImageResource(R.drawable.no);
} else {
imageView.setImageResource(R.drawable.ok);
}
return rowView;
}
}

 


بروز رسانیdata model از طریق کلاس adapter

سطر مورد نظر می تواند view هایی داشته باشد که با data model ( آبجکتی که داده ها را کپسوله می کند ) از طریق کلاس adapter تعامل دارند. به طور مثال، شما می توانید یک Checkbox در layout مربوط به سطر داشته باشید و هر زمان که این Checkbox تیک دار و به اصطلاح انتخاب شد، داده های موجود در آبجکت model نیز همگام با آن تغییر کرده و بروز رسانی شوند.

 


امیدواریم آموزش adapter اختصاصی در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟