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

انتخاب چندین آیتم در ListView اندروید استودیو

۶۴ / ۱۰۰

پس از ایجاد لیست، قاعدتا می خواهید آیتم هایی را در آن انتخاب نمایید. از آنجایی که ( به هنگام پیمایش به پایین و بالای لیست ) سطرهای ListView بازیافت شده ( recycle ) و مجددا مورد استفاده قرار می گیرند، نمی توان انتخاب (اطلاعات مربوط به وضعیت و انتخاب) را در سطح View ذخیره کرد.

 

model

انتخاب آیتم ها در لیست ( و تبادل داده بین UIوModel) ، تنها یک نمونه از تعامل بین سطر (UI) و داده های متناظر در model است و می توان سناریوهای دیگری را تصور کرد.

به منظور ماندگارسازی و ذخیره ی دائمی انتخاب، شما بایستی data model خود را با اطلاعات مربوط به وضعیت انتخاب شده بروز رسانی نمایید. به منظور بروز رسانی data model در ،ListView ابتدا می بایست کلاس Adapter اختصاصی خود را تعریف نمایید. در سطح این کلاس، شما یک listener به View متصل می کنید که وظیفه ی انتخاب المان متناظر در model را بر عهده دارد. پس از انتخاب المان مورد نظر در لیست، اطلاعات المان مربوطه را در model بروز رسانی می کنید. حال برای بروز رسانی و دسترسی به اطلاعات المان متناظر در model ، آن را به صورت یک تگ به view اضافه می کنید.

مثال زیر نشان می دهد چگونه از آبجکت های استاندارد جاوا استفاده کرده و چگونه بین Views و model تعاملو ارتباط دو طرفه برقرار نمایید.


 تعامل و ارتباط دو طرفه بین Domain model و ListView سطرهای ListView 

ابتدا Model زیر را ایجاد نمایید. این کلاس اسم و اطلاعات را، در صورتی که المان در حال حاضر انتخاب شده باشد، در خود ذخیره می نماید.

 

package de.vogella.android.listactivity;
public class Model {
private String name;
private boolean selected;
public Model(String name) {
this.name = name;
selected = false;
}
public String getName() {
return name;
}
public void setName(String name) {
package de.vogella.android.listactivity;
public class Model {
private String name;
private boolean selected;
public Model(String name) {
this.name = name;
selected = false;
}
public String getName() {
return name;
}
public void setName(String name) {

یک فایل  layout به نام rowbuttonlayout.xml مانند زیر ایجاد نمایید.

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@+id/label"
android:textSize="30px" >
</TextView>
<CheckBox
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="4px"
android:layout_marginRight="10px" >
</CheckBox>
</RelativeLayout>

یک کلاس Adapter با پیاده سازی زیر ایجاد نمایید. کلاس نام برده یک ( listener گوش فراخوان به رخدادها ) بر روی آبجکت Checkbox اضافه می کند. به دنبال انتخاب ،checkbox داده های مربوطه در model نیز بروز رسانی می شوند. Checkbox به وسیله ی متد ()getTag داده های المان متناظر خود در data model را بازیابی می کند.

 

package de.vogella.android.listactivity;
import java.util.List;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
public class InteractiveArrayAdapter extends ArrayAdapter<Model> {
private final List<Model> list;
 private final Activity context;
public InteractiveArrayAdapter(Activity context, List<Model> list) {
super(context, R.layout.rowbuttonlayout, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected CheckBox checkbox;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.rowbuttonlayout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
viewHolder.checkbox
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Model element = (Model) viewHolder.checkbox
.getTag();
element.setSelected(buttonView.isChecked());
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
holder.checkbox.setChecked(list.get(position).isSelected());
return view;
}
}

حال کد activity را به صورت زیر ویرایش نمایید.

 

package de.vogella.android.listactivity;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class MyList extends ListActivity {
/** Called when the activity is first created. */
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// create an array of Strings, that will be put to our ListActivity
ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this,
getModel());
setListAdapter(adapter);
}
private List<Model> getModel() {
List<Model> list = new ArrayList<Model>();
list.add(get("Linux"));
list.add(get("Windows7"));
list.add(get("Suse"));
list.add(get("Eclipse"));
list.add(get("Ubuntu"));
list.add(get("Solaris"));
list.add(get("Android"));
list.add(get("iPhone"));
// Initially select one of the items
list.get(1).setSelected(true);
return list;
}
private Model get(String s) {
return new Model(s);
}
}

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

 


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

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

ارسال دیدگاه

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

×

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

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

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

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