آموزش ساخت ListView سفارشی شامل Radiobutton
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت ListView سفارشی شامل Radiobutton در برنامه نویسی اندروید می پردازیم قبلتر آموزش قرار دادن Checkbox در listView قرار داده بودیم امروز در صدد برآمدیم تا آموزش دکمه های رادیویی (RadioButton) در ListView را نیز قرار دهیم در ادامه می توانید پیش نمایشی از آن را مشاهده کنید با ما همراه باشید.
این آموزش بیشتر از آن چیزی که شما فکر خواهید کرد نیاز شما را برآورده خواهد کرد.
ابتدا وارد فایل layout خود شده و کد های زیر را در آن قرار دهید در اینجا نام layout ما برابر با activity_main.xml است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?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="match_parent" android:orientation="vertical"> <!-- ListView and Submit Button--> <ListView android:id="@+id/simpleListView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@+id/submit" android:divider="@color/material_blue_grey_800" android:dividerHeight="1dp" android:footerDividersEnabled="false" /> <Button android:id="@+id/submit" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_margin="20dp" android:background="#0f0" android:text="Submit" android:textColor="#fff" android:textSize="20sp" /> </RelativeLayout> |
با کمی دقت متوجه می شوید که یک ListView و یک دکمه در layout قرار گرفته است.
مثل همیشه چون می خواهیم از آداپتور سفارشی استفاده کنیم باید یک فایل به نام list_items.xml در layout خود ایجاد کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <!-- TextView for displaying question--> <TextView android:id="@+id/question" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="@dimen/activity_horizontal_margin" android:textColor="#000" /> <!-- RadioGroup for grouping of RadioButton--> <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal" android:weightSum="2"> <RadioButton android:id="@+id/yes" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_weight="1" android:text="Yes" android:textColor="#000" /> <RadioButton android:id="@+id/no" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_weight="1" android:text="No" android:textColor="#000" /> </RadioGroup> </LinearLayout> |
همانطور که قبلتر هم گفتیم کد بالا شکل ظاهری هر کدام از آیتم های ListView را ایجاد می کند.
حالا باید آداپتور سفارشی خودمان را ایجاد کنیم یک فایل جاوا به نام CustomAdapter.java ایجاد کرده و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | package ir.programchi; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CompoundButton; import android.widget.RadioButton; import android.widget.TextView; import java.util.ArrayList; public class CustomAdapter extends BaseAdapter { Context context; String[] questionsList; LayoutInflater inflter; public static ArrayList<String> selectedAnswers; public CustomAdapter(Context applicationContext, String[] questionsList) { this.context = context; this.questionsList = questionsList; // initialize arraylist and add static string for all the questions selectedAnswers = new ArrayList<>(); for (int i = 0; i < questionsList.length; i++) { selectedAnswers.add("Not Attempted"); } inflter = (LayoutInflater.from(applicationContext)); } @Override public int getCount() { return questionsList.length; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { view = inflter.inflate(R.layout.list_items, null); TextView question = (TextView) view.findViewById(R.id.question); RadioButton yes = (RadioButton) view.findViewById(R.id.yes); RadioButton no = (RadioButton) view.findViewById(R.id.no); yes.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) selectedAnswers.set(i, "Yes"); } }); no.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) selectedAnswers.set(i, "No"); } }); question.setText(questionsList[i]); return view; } } |
این آداپتور yes یا no بودن انتخاب کاربر را بر می گرداند.
و در آخر وارد MainActivity.java شده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package ir.p; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { ListView simpleList; String[] questions; Button submit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); questions = getResources().getStringArray(R.array.questions); simpleList = (ListView) findViewById(R.id.simpleListView); submit = (Button) findViewById(R.id.submit); CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), questions); simpleList.setAdapter(customAdapter); submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String message = ""; for (int i = 0; i < CustomAdapter.selectedAnswers.size(); i++) { message = message + "\n" + (i + 1) + " " + CustomAdapter.selectedAnswers.get(i); } Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); } }); } } |
در بالا ممکن است خطا داشته باشید چون ما یکسری داده sample را در string.xml قرار داده ایم
پس وارد فایل String.xml که در مسیر res/values شده و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 | <string-array name="questions"> <item>Would you like to play table tennis with me later?</item> <item>Do you have the Thrills latest album?</item> <item>Are you renting your house?</item> <item>Is it expensive?</item> <item>Do you know Roman Reign?</item> </string-array> |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.