قالب و افزونه وردپرس

افزودن checkbox به لیست ویو

منتشرشده توسط حامد قنبری در تاریخ

در این آموزش به شما نشان خواهیم داد چگونه می توان به یک لیست ویو ، چک لیست را اضافه کرد. به همین منظور در گام نخست می بایست یک آداپتور آرایه ای سفارشی  را طراحی کنیم . همانطور که می دانیدlistview حاوی داده های در چند ردیف است و باید هر ردیف را به صورت جداگانه وارد کنیم، زیرا هر ردیف دارای ویو خاص  چک لیست خواهد بود که فقط  با اجرای آداپتور سفارشی این کار  امکانپذیر خواهد بود.ما برای اضافه کردن چک لیست به listview به دو فایل XML نیاز داریم. اولین فایل XML فایل listview را نگه می دارد و فایل XML دوم حاوی آیتم های ردیف (چک باکس و نمایش متن) است.

طراحی یک ردیف

listview از چندین ردیف تشکیل شده است، بنابراین ما  در گام نخست باید محتوای ردیف های لیست را طراحی کنیم.  فایل xml  جدیدی را در قسمت لایوت اجاد می کنیم و نام آن را row.xml می گذاریم .در زیر فایل XML حاوی CheckBox و TextView است.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/checkBox1"/>

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"/>

</LinearLayout>

 

بعد ما نیاز داریم یک فایل XML برای نگه داشتن Listview داشته باشیم.

گام 2: ایجاد یک فایل جدید Activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

آداپتور آرایه سفارشی

هدف ما افزودن داده ها در لیست با یک چک باکس است. listview یک لیست از آیتم های قابل مشاهده خواهد بود از این رو   قرار دادن داده ها در داخل listview، ما باید آیتم ها داده را به داده های قابل مشاهده تبدیل کنیم. و این کار توسط آداپتور صورت می پذیرد .در زیر نمایش تصویری یک آداپتور ارائه شده است.

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

کلاس جدیدی با نام model.java  ایجاد کنید و کدهای زیر را در آن قرار دهید.

package examples.psrd.ir.myapplication;


public class Model {
    String name;
    int value; /* 0 -&gt; checkbox disable, 1 -&gt; checkbox enable */

    Model(String name, int value){
        this.name = name;
        this.value = value;
    }
    public String getName(){
        return this.name;
    }
    public int getValue(){
        return this.value;
    }

}

کلاس جدیدی با نام CustomAdapter.java  را ایجاد کرده و کدهای زیر را در داخل آن قرار دهید.

package examples.psrd.ir.myapplication;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
public class CustomAdapter extends ArrayAdapter{
        Model[] modelItems = null;
        Context context;
public CustomAdapter(Context context, Model[] resource) {
        super(context,R.layout.row,resource);
        // TODO Auto-generated constructor stub
        this.context = context;
        this.modelItems = resource;
        }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        convertView = inflater.inflate(R.layout.row, parent, false);
        TextView name = (TextView) convertView.findViewById(R.id.textView1);
        CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1);
        name.setText(modelItems[position].getName());
        if(modelItems[position].getValue() == 1)
        cb.setChecked(true);
        else
        cb.setChecked(false);
        return convertView;
        }
        }

 

 

در MainActivity، ما یک مرجع از listview ایجاد می کنیم و آن را با فایل XML پیوند می دهیم و سپس ما داده ها را به سازنده آداپتور سفارشی انتقال خواهیم داد. پس از آن، ما آداپتور را در فهرست لیست قرار خواهیم داد. از این رو کدهای MainActivity  به شکل زیر خواهد بود:

package examples.psrd.ir.myapplication;


import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends Activity {
    ListView lv;
    Model[] modelItems;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.listView1);
        modelItems = new Model[5];
        modelItems[0] = new Model("kerman", 0);
        modelItems[1] = new Model("tabriz", 1);
        modelItems[2] = new Model("shiraz", 1);
        modelItems[3] = new Model("tehran", 0);
        modelItems[4] = new Model("kordestan", 1);
        CustomAdapter adapter = new CustomAdapter(this, modelItems);
        lv.setAdapter(adapter);
    }

}

حال پروژه را اجرا کرده و از آن در آموزش هر چه بیشتر خود استفاده کنید. اگر مشکلی در اجرای کدها وجود دارد یا سوال مشخصی از نویسنده سایت دارید سوالات خود را در قسمت دیدگاه ها بیان کنید.

کپی برداری از محتوای سایت psrd، ممنوع بوده و پیگرد قانونی دارد. (تنها استفاده شخصی کاربران ، مجاز است) (کپی برداری توسط سایر وب سایت ها  غیرقانونی بوده و در صورت رویت به ستادسازماندهی اطلاع داده خواهد شد.

 

 

 


1 دیدگاه

حامد قنبری · آگوست 24, 2018 در 12:56 ب.ظ

باید اکتیویتی یا فرگمنت را به نوع onitemclicklistener گسترش دهید و با overide کردن متد مربوط به ان ارزش مورد نظر خود را به سرور پست کنید

پاسخ دادن به حامد قنبری لغو پاسخ

Avatar placeholder

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