کارکردن با ListView در اندروید

نمایش سطر به سطر داده‌ها

در مطلب دو هفته پیش در مورد ListView‌ و کاربرد آن به عنوان یک عنصر اصلی در نمایش اطلاعات در تلفن‌همراه صحبت کردیم. در این شماره قصد داریم این بحث را قدری بازتر کنیم و در مورد موضوعات بیشتری صحبت کنیم. در شماره پیش یک فهرست را مثال زدیم که قرار بود یک‌سری رشته را نمایش دهد. برای آن یک Adapter تعریف کردیم که به وسیله آن، داده‌های خود را نمایش دهیم. حالا می‌خواهیم در این شماره به جای نمایش یک رشته متنی، قدری پیچیده‌تر کار کنیم و اطلاعات بیشتری را در یک فهرست نمایش دهیم. برای این‌که یک آرایه از یک کلاس را در یک ListView نمایش دهیم، برای شروع یک کلاس به صورت زیر تعریف می‌کنیم.
کد خبر: ۴۸۳۳۷۱

class Consumer{

public int id;

public String name;

public boolean state;

public String image; }

قرار است ما اطلاعات هر Consumer را در یک سطر از یک ListView نمایش دهیم. بنابراین یک List از Consumer ایجاد و آن را مقدار دهی می‌کنیم:

List«Consumer» consumers = new ArrayList«Consumer»();

همان‌طور که قبلا گفته شد، یک ListView از یک Adapter به عنوان منبع داده برای نمایش داده‌ها استفاده می‌کند. در شماره پیش ما یک adapter ایجاد کردیم که از کلاس «ArrayAdapter«String به ارث رسیده بود.

سوال این است که «String» به چه معنی است؟ علامت‌های « » به معنی Generic‌ است که در زبان++C به نام template شناخته می‌شود.

به بحث اصلی برمی‌گردیم و یک Adapter به صورت زیر درست می‌کنیم:

public class iAdapter extends ArrayAdapter«Consumer»{

Consumer[] consumers;

Context ctx;

public iAdapter(Context context, Consumer[] objects) {

super(context, R.layout.consumer_row, objects);

this.items = objects;

this.ctx = context; } }

در مثال بالا ما یک layout با کد R.layout.consumer_row ایجاد کرده‌ایم که هر عنصر از objects که یک شیء از کلاس Consumer بوده قرار است اطلاعات آن را در R.layout.consumer_row نمایش دهد. کافی است متد getView کلاس ArrayAdapter را پیاده کنیم:

@Override

public View getView(int position, View convertView, ViewGroup parent) {

Consumer currentItem = items[position];

View root = LayoutInflater.from(this.ctx).inflate(R.layout.consumer_row, null);

return root; }

ابتدا بخشی را که قرار است الگوی getView برای آن اجرا شود، توسط position بازیابی می‌کنیم. سپس با استفاده از LayoutInflator یک View که نشان دهنده یک نمونه از consumer_row است، بازیابی می‌کنیم‌. حالا می‌خواهیم اطلاعات currentItem را در این سطر نمایش دهیم. ابتدا View‌های موجود را در consumer_row بازیابی می‌کنیم.

TextView tv = (TextView)root.findViewById(R.id.name);

ImageView imv = (ImageView)root.findViewById(R.id.image);

حالا باید مقدار image و name شیء currentItem را نمایش دهیم:

tv.setText(currentItem.name);

imv. setImageDrawable(Drawable.createFromFile(currentItem.image));

نکته در مورد متد setImageDrawable شیء ImageView است که شما می‌توانید جای این الگو، از متد‌های دیگر برای نمایش عکس خود استفاده کنید. این‌که کدام متد برای نمایش عکس‌ها مناسب است با توجه به نوع عکسی که می‌خواهید نمایش دهید، متفاوت است. حال می‌خواهیم مقدار state را که یک متغیر از نوع Boolean است، در نمایش هر سطر در نظر بگیریم. اگر مقدار state برابر false باشد، رنگ متن tv آن سطر قرمز اگر برابر true باشد، برابر سبز است.

If(currentItem.state)

Tv.setTextColor(Color.GREEN);

else

Tv.setTextColor(Color.RED);

حال برای این‌که ظاهر صفحه زیباتر شود، پس زمینه سطر‌ها را یکی در میان خاکستری و مشکی می‌کنیم تا نحوه نمایش آنها از یک حالت یکنواخت خارج شود:

If(position % 2 == 0)

Root.setBackgroundColor(Color.GRAY);

Else

Root.setBackgroundColor(Color.BLACK);

امیربهاءالدین سبط‌الشیخ

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها