ساخت لیست ویو با قابلیت جستوجوی الفبایی(جاوا-اندروید)
برای شروع کار یک پروژه جدید ایجاد می کنیم و اسمش رو ListView with Alphabetical قرار میدیم که به معنی لیست ویو به همراه حروف الفبا است.بر روی لایه برنامه از یک listview برای نمایش لیست میوه ها و از یک LinearLayout برای نمایش حروف اافبا استفاده می کنیم.(کدهای کامل لایه برنامه یا activity_main.xml).
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:paddingLeft="5dp" tools:context=".MainActivity" android:baselineAligned="false" > <ListView android:id="@+id/list_fruits" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:paddingRight="5dp" > </ListView> <LinearLayout android:id="@+id/side_index" android:layout_width="50dp" android:layout_height="fill_parent" android:background="#c3c3c3" android:gravity="center_horizontal" android:orientation="vertical" > </LinearLayout> </LinearLayout>
بعد از اینکه لایه برنامه رو تکمیل کردیم نوبت اون میرسه که یک لایه جدید ایجاد کنیم به اسم side_index_item.xml تا حروف الفبا داخل اون قرار بگیره.ایجاد یک لایه و یک فایل xml رو در جلسه پنجاه و ششم میتونید ببینید.(کدهای کامل لایه جدید).
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/side_list_item" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="center" android:padding="3dp" android:textSize="14sp" />
خیلی عالی ,بعد از اینکه لاهی های برنامه رو تکمیل کردیم وقت اون میرسه که اسم میوه هامون رو به لیست ویو اضافه کنیم.برای این کار از پوشه values فایل String.xml رو انتخاب می کنیم و ایتم های زیر رو بهش اضافه می کنیم.(لیست ایتم های فایل string).فایل string در واقع به نوعی وظیفه ذخیره سازی اطلاعات در قالب یک فایل xml رو برعهده داره.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">ListView with Alphabetical</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string-array name="fruits_array"> <item>Apples</item> <item>Apricots</item> <item>Avocado</item> <item>Annona</item> <item>Banana</item> <item>Blueberry</item> <item>Blackberry</item> <item>Blackapple</item> <item>Custard Apple</item> <item>Clementine</item> <item>Cantalope</item> <item>Date</item> <item>Elderberry</item> <item>Fig</item> <item>Grapefruit</item> <item>Grape</item> <item>Gooseberry</item> <item>Guava</item> <item>Honeydew melon</item> <item>Jackfruit</item> <item>Juniper Berry</item> <item>Kiwi</item> <item>Kumquat</item> <item>Lemons</item> <item>Limes</item> <item>Lychee</item> <item>Mango</item> <item>Mandarin</item> <item>Nectaraine</item> <item>Orange</item> <item>Olive</item> <item>Prunes</item> <item>Pears</item> <item>Plum</item> <item>Pineapple</item> <item>Peach</item> <item>Papaya</item> <item>Pomelo</item> <item>Raspberries</item> <item>Rambutan</item> <item>Strawberries</item> <item>Sweety</item> <item>Salmonberry</item> <item>Tangerines</item> <item>Tomato</item> <item>Ugli</item> <item>Watermelon</item> <item>Woodapple</item> </string-array> </resources>
در بخش بعدی کلاس MainActivity.java رو اجرا میکنیم و کدهای زیر رو بهش اضافه می کنیم.در این اموزش با HashMap اشنا میشیم.(کدهای کامل کلاس MainActivity.java).
import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { Map<String, Integer> mapIndex; ListView fruitList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //گرفتن اطلاعات از فایل xml String[] fruits = getResources().getStringArray(R.array.fruits_array); //ایجاد یک ارایه Arrays.asList(fruits); fruitList = (ListView) findViewById(R.id.list_fruits); fruitList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fruits)); getIndexList(fruits); displayIndex(); } //با استفاده از hashmap کلید ها و حروف ها رو به صورت لیست نمایش میدیم private void getIndexList(String[] fruits) { mapIndex = new LinkedHashMap<String, Integer>(); for (int i = 0; i < fruits.length; i++) { String fruit = fruits[i]; String index = fruit.substring(0, 1); if (mapIndex.get(index) == null) mapIndex.put(index, i); } } //نمایش حروف الفبا private void displayIndex() { LinearLayout indexLayout = (LinearLayout) findViewById(R.id.side_index); TextView textView; List<String> indexList = new ArrayList<String>(mapIndex.keySet()); for (String index : indexList) { textView = (TextView) getLayoutInflater().inflate( R.layout.side_index_item, null); textView.setText(index); textView.setOnClickListener(this); indexLayout.addView(textView); } } public void onClick(View view) { TextView selectedIndex = (TextView) view; fruitList.setSelection(mapIndex.get(selectedIndex.getText())); }
منبع :
http://appinapps.com/Articles_View.aspx?t=%D8%B3%D8%A7%D8%AE%D8%AA%20%D9%84%DB%8C%D8%B3%D8%AA%20%D9%88%DB%8C%D9%88%20%D8%A8%D8%A7%20%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA%20%D8%AC%D8%B3%D8%AA%D9%88%D8%AC%D9%88%DB%8C%20%D8%A7%D9%84%D9%81%D8%A8%D8%A7%DB%8C%DB%8C&gid=11&aid=127