آموزش برنامه نویسی اندروید با اندروید استودیو (بخش سی: کار با لیست ویو (ListView) در اندروید)

استاندارد

در بخش قبل، دیدیم که می توانیم آیتم هایی را به صورت کشویی در یک جا وارد نماییم. کشویی بودن ابزار Spinner به ما این امکان را می داد که با کلیک بر روی آن، لیستی که حاوی آیتم های وارد شده توسط ما است به کاربر نمایش داده شود تا بتواند انتخاب کند.  حال اگر بخواهیم این آیتم ها به صورتی عمودی و نه کشویی در اپلیکیشن ما وارد شده باشند چه کار کنیم؟

جواب استفاده از ListView در برنامه نویسی اندروید است.

اقلامی که در ListView وجود دارند، یا به صورت پیش فرض توسط برنامه نویس اضافه می شوند. یا ListView این اقلام را از دیتابیس می گیرد.

در این بخش سعی شده است با مثالی نحوه افزودن مقادیر به یک لیست ویو آموزش داده شود.

مقدار دهی به لیست ویو کار سختی نیست. اگر بخش قبل را مشاهده کرده باشید خواهید دید که برای اضافه کردن مقادیر به لیست ویو، تفاوت چندانی بین یک لیست ویو و لیست کشویی وجود ندارد.

در اینجا یک پروژه به نام ListView-Gsm ایجاد کرده ام. از قسمت Paletteها و در Containers، یک ابزار ListView را انتخاب می کنیم و به لایه اپلیکیشن خود، می کشیم.

کد ListView

<ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

اگر کد شما هم مثل کد من ID ندارد می توانید با اضافه کردن کد زیر به آن آیدی دلخواه خودتان را بدهید. من در اینجا از آیدی listview استفاده نموده ام.

android:id="@+id/listview"

نکته: به جای “listview” می توانید مقداری که خودتان می خواهید را به عنوان ID انتخاب نمایید.

حال به قسمت جاوای برنامه می رویم تا کدهای مربوط به آن را بنویسیم. فایل MainActivity.java را باز می کنیم و مثل بخش قبل، کدهای زیر را در آن می نویسیم.

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

اول یک متغیر از نوع رشته String معرفی کرده و به آن مقدار می دهیم. این مقادیر باید همان مقادیری باشند که ما می خواهیم لیست ویو ما آن ها را نشان بدهد.

من از متغیر Month در اینجا استفاده کردم و به آن مقادیر ماههای مهر تا اسفند را دادم:

String[] Month = {"Mehr" , "Aban" , "Azar" , "Day" , "Bahman" ,  "Esfand"};

در مرحله بعدی، یک ArrayAdapter به رشته (string) اضافه نماییم. این کار باعث می شود که اطلاعات از رشته ای که تعریف کرده بودیم گرفته شود و سپس به صورت لیست شده به لیست ویو ما فرستاده شود.

این کد داخل تابع ()onCreate نوشته می شود.

ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.activity_listview, Month);

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

این کد نیز در داخل تابع ()onCreate نوشته می شود.

ListView listView = (ListView) findViewById(R.id.listview);

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

این اطلاعات همان ماههای مهر تا اسفند هستند که به صورتی تنظیم شده اند که با استفاده از آداپتر لیست ویو آن ها را بشناسد.

این کد نیز در داخل تابع ()onCreate نوشته می شود.

listView.setAdapter(adapter);

کد کامل MainActivity

package com.gsm_developers.listview_gsm;

import android.app.ListActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    String[] Month = {"Mehr" , "Aban" , "Azar" , "Day" , "Bahman" ,  "Esfand"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.activity_listview, Month);
        ListView listView = (ListView) findViewById(R.id.listview);
        listView.setAdapter(adapter);

    }
}

در این خط از تابع Errorی را مشاهده می کنید.

ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.activity_listview, Month);

این ارور در قسمت R.layout.activity_listview می باشد. و اگر Alt + Enter را هم برای این ارور بزنیم، هیچ کلاسی را نمی تواند Import نماید.

این ارور به این دلیل است که در Layout برنامه، تعریفی برای لیست ویو نداشته ایم.

راه حل چیست؟

به قسمت Res و سپس Layout بروید.

بر روی Layout کلیک راست نمایید و از قسمت New، با زدن Layout resource file می توانید یک Layout جدید را علاوه بر activity_main.xml اضافه نمایید.

در پنجره ی باز شده ما فقط نام activity_listview را برای Layout خود، وارد می کنیم.

مشاهده می کنید که Layout جدید به برنامه افزوده شده است.

حال باید به این Layout، یک کد برای کاری که می خواهیم انجام دهیم وارد نماییم. تا قسمت جاوای برنامه بتواند لیست ویو را شناسایی کند و اندروید استودیو، برای اجرای اپلیکیشن از این قسمت که ظاهر برنامه است برای ایجاد لیست استفاده می کند.

به سراغ فایل activity_listview.xml می رویم و کد زیر را وارد می کنیم:

<?xml version="1.0" encoding="utf-8"?>
<!--  Single List Item Design -->

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/label"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dip"
    android:textSize="16dip"
    android:textStyle="bold" >
</TextView>

عکس فایل activity_listview.xml من به همراه کدهای آن را در زیر مشاهده می کنید.

حال کد جاوای برنامه ظاهر لیست ویو را با استفاده از فایلی که ما به آن شناساندیم، شناسایی کرده است. و برنامه آماده اجرا می باشد.

برنامه را اجرا کرده و خروجی زیر را مشاهده می کنیم:

لازم به ذکر است که با تغییر کدی که برای فایل activity_listview در قسمت قبل، معرفی کردیم، می توانید لیست ویو خود را به صورت های دیگری نیز مشاهده کنید.

مثلا با تغییر مقدار textSize ، سایز نوشته های درون لیست ویو تغییر خواهد کرد.