首先拿到ListView,然后添加适配器,setAdapter参数是一个ListAdapter接口,若直接实现接口, 将有很多不必要的方法,一般这种情况都有一个对应的实现了相应接口的适配器类,BaseXXX、 DefaultXXX、SimpleXXX等。 在BaseAdapter的getView方法中,需要提供一个供显示内容的view,在此处应和scrollView 做对比,若ScrollView中要显示50条TextView的数据,那么就有50个TextView的对象在内存中, 这种情况下若数据很多,多至上万,是很消耗内存的,而此处为ListView添加适配器的形式,在指定了 view的模板后,TextView的数量只是保证能充满整个显示屏,也就是说在显示屏上需要显示新的 TextView的时候才会调用getView()方法,而旧的TextView一旦从屏幕上移除了,就没有任何对象 引用它了,等着呗垃圾回收器处理。这样内存中就只保证能充满显示屏的TextView对象,大大的节省了内存
public class MainActivity extends Activity {
private ListView listView;
private int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new MyAdapter());
}
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return 50;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(getApplicationContext());
tv.setTextSize(20);
tv.setBackgroundColor(Color.BLUE);
tv.setText(i++ + "");
return tv;
}
}
}
<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="vertical" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>