Skip to content
This repository was archived by the owner on Apr 16, 2022. It is now read-only.

Commit f2a9b16

Browse files
li2nz86400
authored andcommitted
为ListFragment创建默认的ArrayAdapter,
(1)ListView只有在需要显示某些列表项时,它才会去申请可用的视图对象;如果为所有的列表项数据创建视图对象,会浪费内存; (2)ListView找谁去申请视图对象呢? 答案是adapter。adapter是一个控制器对象,负责从模型层获取数据,创建并填充必要的视图对象,将准备好的视图对象返回给ListView; (3)首先,通过调用adapter的getCount()方法,ListView询问数组列表中包含多少个对象(为避免出现数组越界的错误);紧接着ListView就调用adapter的getView(int, View, ViewGroup)方法。 (4)android.R.layout.simple_list_item_1)是Android SDK提供的列表项的布局资源,仅包含一个TextView; (5)默认的toString()方法等价于getClass().getName() + '@' + Integer.toHexString(hashCode()) ,返回了混和对象类名和内存地址的字符串信息。
1 parent 19d52e0 commit f2a9b16

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/me/li2/android/criminalintent/Crime.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ public Crime() {
1616
mDate = new Date();
1717
}
1818

19+
@Override
20+
public String toString() {
21+
return mTitle;
22+
}
23+
1924
public String getTitle() {
2025
return mTitle;
2126
}

src/me/li2/android/criminalintent/CrimeListFragment.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,29 @@
44

55
import android.os.Bundle;
66
import android.support.v4.app.ListFragment;
7+
import android.util.Log;
8+
import android.view.View;
9+
import android.widget.ArrayAdapter;
10+
import android.widget.ListView;
711

812
public class CrimeListFragment extends ListFragment{
13+
private static final String TAG = "CrimeListFragment";
914
private ArrayList<Crime> mCrimes;
1015

1116
@Override
1217
public void onCreate(Bundle savedInstanceState) {
1318
super.onCreate(savedInstanceState);
1419
getActivity().setTitle(R.string.crimes_title);
1520
mCrimes = CrimeLab.get(getActivity()).getCrimes();
21+
22+
ArrayAdapter<Crime> adapter =
23+
new ArrayAdapter<Crime>(getActivity(), android.R.layout.simple_list_item_1, mCrimes);
24+
setListAdapter(adapter);
25+
}
26+
27+
@Override
28+
public void onListItemClick(ListView l, View v, int position, long id) {
29+
Crime c = (Crime) l.getAdapter().getItem(position);
30+
Log.d(TAG, c.getTitle() + " was clicked");
1631
}
17-
1832
}

0 commit comments

Comments
 (0)