SlideShare ist ein Scribd-Unternehmen logo
1 von 10
‫ید‬‫و‬‫اندر‬ ‫در‬‫ی‬ ‫ش‬‫ر‬‫سفا‬‫لیست‬ ‫یک‬‫ایجاد‬‫ش‬‫ز‬‫آمو‬
Parmistech.com
Ehsan Ghorbannezhad
Android Programming - 2014
list_row_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/list_row_bg" android:state_pressed="false"
android:state_selected="false"/>
<item android:drawable="@drawable/list_row_bg_hover" android:state_pressed="true"/>
<item android:drawable="@drawable/list_row_bg_hover" android:state_pressed="false"
android:state_selected="true"/>
</selector>
‫فایل‬‫یک‬ ‫بر‬‫ی‬‫مرور‬selector‫انتخاب‬ ‫هنگام‬ ‫در‬‫لیست‬‫های‬‫آیتم‬ ‫کردت‬ ‫هایالیت‬‫ای‬‫ر‬‫ب‬
Parmistech.com
 <RelativeLayout >
 <ImageView android:id="@+id/thumbnail" />
 <TextView android:id="@+id/title" />
 <TextView android:id="@+id/rating"/>
 <TextView android:id="@+id/genre" />
 <TextView android:id="@+id/releaseYear" />
 </RelativeLayout>
Parmistech.com
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Movie> movieList = createMovieList();
ListView = (ListView) findViewById(R.id.list);
CustomListAdapter adapter = new CustomListAdapter(this, movieList);
listView.setAdapter(adapter);
}
}
Parmistech.com
public class CustomListAdapter extends BaseAdapter {
private final Context _context;
private final LayoutInflater _ inflater;
private List<Movie> _items;
}
‫نکته‬:LayoutInflater‫ساختن‬ ‫برای‬‫سیستمی‬ ‫سرویس‬‫یک‬(‫کردن‬‫پر‬)‫یک‬‫نوع‬ ‫از‬‫ی‬ ‫ش‬View‫فایل‬‫روی‬ ‫از‬xml‫متناظرش‬.
‫نکته‬:BaseAdapter‫می‬ ‫را‬ ،‫هایش‬ ‫متد‬‫از‬‫ی‬ ‫بعض‬‫ی‬‫ساز‬ ‫پیاده‬ ‫و‬‫آن‬‫از‬‫بردن‬ ‫ارث‬‫طریق‬ ‫از‬‫ی‬ ‫سفارش‬‫آداپتر‬‫یک‬ ‫ساخت‬‫امکان‬‫که‬ ‫پایه‬‫کالس‬‫یک‬‫دهد‬.
Parmistech.com
@Override
public int getCount() {
return _items == null ? 0 : items.size();
}
@Override
public Object getItem(int position) {
return items == null ? null : items.get(position);
}
@Override
public long getItemId(int position) {
return items == null ? 0 : items.get(position).getId();
}
‫کالس‬‫از‬ ‫ن‬‫چو‬BaseAdapter‫لذا‬ ‫بردیم‬‫ث‬‫ر‬‫ا‬‫مجبور‬‫ی‬ ‫نویس‬‫ز‬‫با‬‫به‬4‫میباشیم‬‫متد‬.‫مهمتر‬ ‫همه‬‫از‬ ‫م‬‫ر‬‫چها‬‫متد‬
‫گردد‬ ‫می‬ ‫معرفی‬‫بعد‬‫اسالید‬ ‫در‬‫که‬ ‫است‬.
‫نکته‬:Position‫است‬‫لیست‬ ‫درون‬ ‫عنصر‬ ‫موقعیت‬،‫میدهد‬ ‫ار‬‫ر‬‫ق‬‫ما‬ ‫اختیار‬ ‫در‬ ‫متدها‬‫این‬ ‫در‬ ‫اندروید‬‫که‬‫ای‬.‫یک‬،‫صفرم‬ ‫عنصر‬‫مثلن‬‫و‬‫م‬
‫غیره‬ ‫یا‬.‫نام‬ ‫با‬‫کالس‬‫این‬ ‫در‬ ‫که‬‫لیست‬‫عناصر‬ ‫به‬‫میتوانیم‬ ‫موقعیت‬‫شماره‬‫این‬‫داشتن‬ ‫با‬‫ما‬Items‫باشیم‬ ‫داشته‬‫ی‬ ‫دسترس‬،‫اند‬ ‫شده‬‫یف‬‫ر‬‫تع‬
(‫متد‬‫طریق‬‫از‬get‫لیست‬‫روی‬ ‫بر‬)
Parmistech.com
@Override
public View getView(int position, View convertView, ViewGroup parent) {
 if (convertView == null)
 convertView = inflater.inflate(R.layout.list_row, null);
// now we can find our item_layout controls - for example:
 ImageView thumb = (ImageView) convertView.findViewById(R.id.thumbnail);
 TextView title = (TextView) convertView.findViewById(R.id.title);
 // whatever we want to bind to our controls - for example :
 title.setText(item.get(position).getTitle();

 return convertView;
{
‫م‬‫ر‬‫چها‬ ‫متد‬ ‫ی‬‫ساز‬ ‫پیاده‬:()getView
‫نکته‬:convertView‫کنید‬ ‫فرض‬‫چیست؟‬15‫دارید‬‫نمایش‬‫ای‬‫ر‬‫ب‬‫آیتم‬.‫لحظه‬‫هر‬ ‫در‬‫شما‬‫موبایل‬‫صفحه‬5‫نمایش‬‫میتواند‬ ‫ا‬‫ر‬ ‫تا‬
‫دهد‬.‫دارند‬‫کردن‬‫اسکرول‬‫به‬ ‫نیاز‬‫مابقی‬.‫متد‬ ‫در‬getView‫تنها‬5convertView‫میشود‬‫ساخته‬.‫همین‬‫از‬ ‫لیست‬‫مابقی‬‫ای‬‫ر‬‫ب‬
5‫میشود‬‫عوض‬ ‫تنها‬‫آن‬‫درون‬‫اطالعات‬ ‫که‬‫اینصورت‬ ‫به‬‫میشود‬ ‫استفاده‬‫تا‬.‫شرط‬‫لذا‬null‫دیگر‬‫ششم‬ ‫عنصر‬‫ای‬‫ر‬‫ب‬ ‫بودن‬False
‫نداریم‬ ‫مجدد‬ ‫ساخت‬‫به‬ ‫نیاز‬ ‫و‬‫برمیگرداند‬.
Parmistech.com
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
 if (convertView == null)
 convertView = inflater.inflate(R.layout.list_row, null);
 holder = new ViewHolder ();
 holder.title = (TextView) convertView.findViewById(R.id.title);
 convertView.setTag(holder);
 } else
 holder = (ViewHolder ) view.getTag();
 hloder.title.setText(item.get(position).getTitle();
 return convertView;
{
‫متد‬ ‫تر‬ ‫امند‬‫ر‬‫کا‬ ‫ی‬‫ساز‬ ‫پیاده‬()getView
‫نکته‬:
‫دستور‬setTag‫یک‬‫ی‬‫نگهدار‬‫ای‬‫ر‬‫ب‬holder‫در‬convertView‫است‬ ‫شده‬ ‫استفاده‬ ‫خودش‬‫با‬‫متناظر‬.‫دستور‬setTag‫متد‬
‫ا‬‫ر‬‫ی‬‫چیز‬‫خواستیم‬ ‫هرجا‬‫که‬ ‫است‬‫عامی‬(‫دیتاتایپی‬‫ازهرنوع‬)‫در‬view‫میکنیم‬ ‫استفاده‬‫نگهداریم‬‫مان‬.
*‫با‬‫آشنایی‬ ‫ای‬‫ر‬‫ب‬ViewHolder‫نمایید‬ ‫مشاهده‬ ‫ا‬‫ر‬‫بعدی‬‫اسالید‬.
Parmistech.com
 static class ViewHolder {

 TextView title;
 TextView genre;
 TextView releaseYear;
 TextView rating;
 ImageView thumb;
}
‫کالس‬ViewHolder
‫نکته‬:ViewHolder‫است‬‫یکسان‬ ‫ها‬‫آیتم‬‫ی‬‫همه‬ ‫قالب‬ ‫چیست؟‬.‫بجای‬‫ما‬ ،‫قبل‬‫مثال‬‫طبق‬‫اگر‬15convertView،5‫میسازیم‬ ‫تا‬.
‫هر‬ ‫در‬ ‫باید‬ ‫ا‬‫ر‬‫چ‬15‫ا‬‫ر‬‫آیتم‬‫آن‬ ‫های‬‫ل‬‫کنتر‬‫بار‬find‫همان‬ ‫ای‬‫ر‬‫ب‬ ‫فقط‬‫اینکار‬‫بجای‬‫کنیم؟‬5‫میدهیم‬‫انجام‬‫ا‬‫ر‬ ‫کار‬‫این‬ ‫تا‬.‫کالس‬‫یک‬‫اینکار‬‫ای‬‫ر‬‫ب‬
‫و‬‫ی‬ ‫سفارش‬static‫نام‬‫به‬ViewHolder‫میسازیم‬.
‫کالس‬‫یف‬‫ر‬‫تع‬ViewHolder‫میشود‬‫تعریف‬ ‫داخلی‬‫بصورت‬(inner class)‫کالس‬ ‫بدنه‬‫داخل‬ ‫در‬‫یعنی‬
CustomLisAdapter‫متد‬‫از‬‫خارج‬ ‫البته‬ ‫و‬getView!
Parmistech.com
 //inside getView
 Animation animation =
 AnimationUtils.loadAnimation(context, (position > lastPosition )
 ? R.anim.up_from_bottom : R.anim.down_from_top);
 v.startAnimation(animation);
 lastPosition = pos;
‫متد‬‫در‬GetView‫روی‬ ‫بر‬ ‫ا‬‫ر‬‫انیمیشن‬ ‫میتوان‬convertView‫کرد‬ ‫اجرا‬.
‫نکته‬:private int lastPosition = -1;‫کالس‬ ‫ابتدای‬ ‫در‬‫ا‬‫ر‬CustomListAdapter‫کنید‬ ‫اضافه‬.
‫نکته‬:up_from_bottom‫و‬down_from_top‫پسوند‬‫با‬‫انیمیشن‬ ‫فایل‬ ‫دو‬‫نام‬xml‫پوشه‬‫در‬‫که‬‫آست‬anim‫داخل‬
‫پوشه‬res‫گیرد‬ ‫ار‬‫ر‬‫ق‬‫باید‬.
‫انیمیشن‬‫یک‬‫از‬‫نمونه‬‫یک‬:
<?xml version="1.0" encoding="utf-8"?>
<translate
android:fromXDelta="90%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="400" />
Parmistech.com

Weitere ähnliche Inhalte

Andere mochten auch

Android development - ListView & Adapter
Android development - ListView & AdapterAndroid development - ListView & Adapter
Android development - ListView & AdapterLope Emano
 
Android life cycle
Android life cycleAndroid life cycle
Android life cycle瑋琮 林
 
Android lifecycle
Android lifecycleAndroid lifecycle
Android lifecycleKumar
 
Introduction to Listview in Android
Introduction to Listview in AndroidIntroduction to Listview in Android
Introduction to Listview in Androidtechnoguff
 
ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]Somkiat Khitwongwattana
 
Android activity lifecycle
Android activity lifecycleAndroid activity lifecycle
Android activity lifecycleSoham Patel
 

Andere mochten auch (6)

Android development - ListView & Adapter
Android development - ListView & AdapterAndroid development - ListView & Adapter
Android development - ListView & Adapter
 
Android life cycle
Android life cycleAndroid life cycle
Android life cycle
 
Android lifecycle
Android lifecycleAndroid lifecycle
Android lifecycle
 
Introduction to Listview in Android
Introduction to Listview in AndroidIntroduction to Listview in Android
Introduction to Listview in Android
 
ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]
 
Android activity lifecycle
Android activity lifecycleAndroid activity lifecycle
Android activity lifecycle
 

Android custom listview

  • 1. ‫ید‬‫و‬‫اندر‬ ‫در‬‫ی‬ ‫ش‬‫ر‬‫سفا‬‫لیست‬ ‫یک‬‫ایجاد‬‫ش‬‫ز‬‫آمو‬ Parmistech.com Ehsan Ghorbannezhad Android Programming - 2014
  • 2. list_row_selector.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/list_row_bg" android:state_pressed="false" android:state_selected="false"/> <item android:drawable="@drawable/list_row_bg_hover" android:state_pressed="true"/> <item android:drawable="@drawable/list_row_bg_hover" android:state_pressed="false" android:state_selected="true"/> </selector> ‫فایل‬‫یک‬ ‫بر‬‫ی‬‫مرور‬selector‫انتخاب‬ ‫هنگام‬ ‫در‬‫لیست‬‫های‬‫آیتم‬ ‫کردت‬ ‫هایالیت‬‫ای‬‫ر‬‫ب‬ Parmistech.com
  • 3.  <RelativeLayout >  <ImageView android:id="@+id/thumbnail" />  <TextView android:id="@+id/title" />  <TextView android:id="@+id/rating"/>  <TextView android:id="@+id/genre" />  <TextView android:id="@+id/releaseYear" />  </RelativeLayout> Parmistech.com
  • 4. public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<Movie> movieList = createMovieList(); ListView = (ListView) findViewById(R.id.list); CustomListAdapter adapter = new CustomListAdapter(this, movieList); listView.setAdapter(adapter); } } Parmistech.com
  • 5. public class CustomListAdapter extends BaseAdapter { private final Context _context; private final LayoutInflater _ inflater; private List<Movie> _items; } ‫نکته‬:LayoutInflater‫ساختن‬ ‫برای‬‫سیستمی‬ ‫سرویس‬‫یک‬(‫کردن‬‫پر‬)‫یک‬‫نوع‬ ‫از‬‫ی‬ ‫ش‬View‫فایل‬‫روی‬ ‫از‬xml‫متناظرش‬. ‫نکته‬:BaseAdapter‫می‬ ‫را‬ ،‫هایش‬ ‫متد‬‫از‬‫ی‬ ‫بعض‬‫ی‬‫ساز‬ ‫پیاده‬ ‫و‬‫آن‬‫از‬‫بردن‬ ‫ارث‬‫طریق‬ ‫از‬‫ی‬ ‫سفارش‬‫آداپتر‬‫یک‬ ‫ساخت‬‫امکان‬‫که‬ ‫پایه‬‫کالس‬‫یک‬‫دهد‬. Parmistech.com
  • 6. @Override public int getCount() { return _items == null ? 0 : items.size(); } @Override public Object getItem(int position) { return items == null ? null : items.get(position); } @Override public long getItemId(int position) { return items == null ? 0 : items.get(position).getId(); } ‫کالس‬‫از‬ ‫ن‬‫چو‬BaseAdapter‫لذا‬ ‫بردیم‬‫ث‬‫ر‬‫ا‬‫مجبور‬‫ی‬ ‫نویس‬‫ز‬‫با‬‫به‬4‫میباشیم‬‫متد‬.‫مهمتر‬ ‫همه‬‫از‬ ‫م‬‫ر‬‫چها‬‫متد‬ ‫گردد‬ ‫می‬ ‫معرفی‬‫بعد‬‫اسالید‬ ‫در‬‫که‬ ‫است‬. ‫نکته‬:Position‫است‬‫لیست‬ ‫درون‬ ‫عنصر‬ ‫موقعیت‬،‫میدهد‬ ‫ار‬‫ر‬‫ق‬‫ما‬ ‫اختیار‬ ‫در‬ ‫متدها‬‫این‬ ‫در‬ ‫اندروید‬‫که‬‫ای‬.‫یک‬،‫صفرم‬ ‫عنصر‬‫مثلن‬‫و‬‫م‬ ‫غیره‬ ‫یا‬.‫نام‬ ‫با‬‫کالس‬‫این‬ ‫در‬ ‫که‬‫لیست‬‫عناصر‬ ‫به‬‫میتوانیم‬ ‫موقعیت‬‫شماره‬‫این‬‫داشتن‬ ‫با‬‫ما‬Items‫باشیم‬ ‫داشته‬‫ی‬ ‫دسترس‬،‫اند‬ ‫شده‬‫یف‬‫ر‬‫تع‬ (‫متد‬‫طریق‬‫از‬get‫لیست‬‫روی‬ ‫بر‬) Parmistech.com
  • 7. @Override public View getView(int position, View convertView, ViewGroup parent) {  if (convertView == null)  convertView = inflater.inflate(R.layout.list_row, null); // now we can find our item_layout controls - for example:  ImageView thumb = (ImageView) convertView.findViewById(R.id.thumbnail);  TextView title = (TextView) convertView.findViewById(R.id.title);  // whatever we want to bind to our controls - for example :  title.setText(item.get(position).getTitle();   return convertView; { ‫م‬‫ر‬‫چها‬ ‫متد‬ ‫ی‬‫ساز‬ ‫پیاده‬:()getView ‫نکته‬:convertView‫کنید‬ ‫فرض‬‫چیست؟‬15‫دارید‬‫نمایش‬‫ای‬‫ر‬‫ب‬‫آیتم‬.‫لحظه‬‫هر‬ ‫در‬‫شما‬‫موبایل‬‫صفحه‬5‫نمایش‬‫میتواند‬ ‫ا‬‫ر‬ ‫تا‬ ‫دهد‬.‫دارند‬‫کردن‬‫اسکرول‬‫به‬ ‫نیاز‬‫مابقی‬.‫متد‬ ‫در‬getView‫تنها‬5convertView‫میشود‬‫ساخته‬.‫همین‬‫از‬ ‫لیست‬‫مابقی‬‫ای‬‫ر‬‫ب‬ 5‫میشود‬‫عوض‬ ‫تنها‬‫آن‬‫درون‬‫اطالعات‬ ‫که‬‫اینصورت‬ ‫به‬‫میشود‬ ‫استفاده‬‫تا‬.‫شرط‬‫لذا‬null‫دیگر‬‫ششم‬ ‫عنصر‬‫ای‬‫ر‬‫ب‬ ‫بودن‬False ‫نداریم‬ ‫مجدد‬ ‫ساخت‬‫به‬ ‫نیاز‬ ‫و‬‫برمیگرداند‬. Parmistech.com
  • 8. @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder;  if (convertView == null)  convertView = inflater.inflate(R.layout.list_row, null);  holder = new ViewHolder ();  holder.title = (TextView) convertView.findViewById(R.id.title);  convertView.setTag(holder);  } else  holder = (ViewHolder ) view.getTag();  hloder.title.setText(item.get(position).getTitle();  return convertView; { ‫متد‬ ‫تر‬ ‫امند‬‫ر‬‫کا‬ ‫ی‬‫ساز‬ ‫پیاده‬()getView ‫نکته‬: ‫دستور‬setTag‫یک‬‫ی‬‫نگهدار‬‫ای‬‫ر‬‫ب‬holder‫در‬convertView‫است‬ ‫شده‬ ‫استفاده‬ ‫خودش‬‫با‬‫متناظر‬.‫دستور‬setTag‫متد‬ ‫ا‬‫ر‬‫ی‬‫چیز‬‫خواستیم‬ ‫هرجا‬‫که‬ ‫است‬‫عامی‬(‫دیتاتایپی‬‫ازهرنوع‬)‫در‬view‫میکنیم‬ ‫استفاده‬‫نگهداریم‬‫مان‬. *‫با‬‫آشنایی‬ ‫ای‬‫ر‬‫ب‬ViewHolder‫نمایید‬ ‫مشاهده‬ ‫ا‬‫ر‬‫بعدی‬‫اسالید‬. Parmistech.com
  • 9.  static class ViewHolder {   TextView title;  TextView genre;  TextView releaseYear;  TextView rating;  ImageView thumb; } ‫کالس‬ViewHolder ‫نکته‬:ViewHolder‫است‬‫یکسان‬ ‫ها‬‫آیتم‬‫ی‬‫همه‬ ‫قالب‬ ‫چیست؟‬.‫بجای‬‫ما‬ ،‫قبل‬‫مثال‬‫طبق‬‫اگر‬15convertView،5‫میسازیم‬ ‫تا‬. ‫هر‬ ‫در‬ ‫باید‬ ‫ا‬‫ر‬‫چ‬15‫ا‬‫ر‬‫آیتم‬‫آن‬ ‫های‬‫ل‬‫کنتر‬‫بار‬find‫همان‬ ‫ای‬‫ر‬‫ب‬ ‫فقط‬‫اینکار‬‫بجای‬‫کنیم؟‬5‫میدهیم‬‫انجام‬‫ا‬‫ر‬ ‫کار‬‫این‬ ‫تا‬.‫کالس‬‫یک‬‫اینکار‬‫ای‬‫ر‬‫ب‬ ‫و‬‫ی‬ ‫سفارش‬static‫نام‬‫به‬ViewHolder‫میسازیم‬. ‫کالس‬‫یف‬‫ر‬‫تع‬ViewHolder‫میشود‬‫تعریف‬ ‫داخلی‬‫بصورت‬(inner class)‫کالس‬ ‫بدنه‬‫داخل‬ ‫در‬‫یعنی‬ CustomLisAdapter‫متد‬‫از‬‫خارج‬ ‫البته‬ ‫و‬getView! Parmistech.com
  • 10.  //inside getView  Animation animation =  AnimationUtils.loadAnimation(context, (position > lastPosition )  ? R.anim.up_from_bottom : R.anim.down_from_top);  v.startAnimation(animation);  lastPosition = pos; ‫متد‬‫در‬GetView‫روی‬ ‫بر‬ ‫ا‬‫ر‬‫انیمیشن‬ ‫میتوان‬convertView‫کرد‬ ‫اجرا‬. ‫نکته‬:private int lastPosition = -1;‫کالس‬ ‫ابتدای‬ ‫در‬‫ا‬‫ر‬CustomListAdapter‫کنید‬ ‫اضافه‬. ‫نکته‬:up_from_bottom‫و‬down_from_top‫پسوند‬‫با‬‫انیمیشن‬ ‫فایل‬ ‫دو‬‫نام‬xml‫پوشه‬‫در‬‫که‬‫آست‬anim‫داخل‬ ‫پوشه‬res‫گیرد‬ ‫ار‬‫ر‬‫ق‬‫باید‬. ‫انیمیشن‬‫یک‬‫از‬‫نمونه‬‫یک‬: <?xml version="1.0" encoding="utf-8"?> <translate android:fromXDelta="90%" android:toXDelta="0%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="400" /> Parmistech.com