[android] listview入门
Listview組件非常重要,4分之一的時間都是在搞這個,還是通過上一節的數據庫,寫個for循環,插入50條數據。
?
先使用笨方法顯示數據,根布局LinearLayout?定義一個id,在activity里面獲取這個id。
獲取PersonDao對象,調用dao對象的查詢全部的方法,得到一個list集合的數據。
遍歷這個集合,遍歷中調用person實體類對象的toString()方法,得到一條記錄的字符串。
遍歷中實例化TextView對象,調用TextView對象的setText()方法,把一條信息放進去。
調用LinearLayout對象的addView(child)方法,child參數就是子view對象
笨方法代碼:
LinearLayout lv=(LinearLayout) findViewById(R.id.lv);PersonDao dao=new PersonDao(this);List<Person> persons=dao.select();for(Person person:persons){TextView tv=new TextView(this);tv.setText(person.toString());lv.addView(tv);}?
?
?
此時屏幕高度不夠,超出去的信息會直接隱藏,系統給提供了一個組件叫ScrollView可以上下滾動,包裹一下LinearLayout,此時會提示命名空間那里錯誤,把命名空間放在SorollView里,指定寬度和高度都是填充父窗體
?
當數據量比較大時,這樣直接new出無數對象很消耗資源,應該是在滑動過程中動態new出組件對象,超出視線就銷毀掉,這個時候引入了新的控件ListView
?
獲取ListView對象,通過findViewById()方法,調用ListView對象的setAdapter(adapter)方法設置數據綁定到ListView,參數是一個ListAdapter接口類型,我們要實現這個接口,把實現類對象傳進去,定義一個私有的內部類實現ListAdapter,這時會要求實現幾十個方法,太多了,系統為我們提供了一個實現類BaseAdapter,默認的實現類大部分都是以BaseXxx,SimpleXxx,DefaultXxx開頭
?
BaseAdapter是一個抽象類,要實現他的抽象方法,內部類繼承BaseAdapter實現以下方法
getCount(),返回int數據的條數,把我的數據集合定義成成員屬性,調用List集合size()方法
getItem(),
getItemId()
getView(position,)?控制索引位置的View對象,position是當前集合的索引,
在這個方法中,我們可以實例化TextView對象,需要傳入上下文對象,使用getApplicationContext()獲取上下文,調用TextView對象的setText(),數據是List集合調用get()方法,傳入索引position獲得,返回那個TV對象。在這個方法中Log.i()打印日志可以看到只會生成視線范圍內的View對象。
activity代碼:
?
package com.tsh.database;import java.util.List;import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView;import com.tsh.database.dao.PersonDao; import com.tsh.database.domain.Person;public class MainActivity extends Activity {private List<Person> persons;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView lv=(ListView) findViewById(R.id.mylist);PersonDao dao=new PersonDao(this);persons=dao.select();lv.setAdapter(new MyAdapter());}private class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {// TODO Auto-generated method stubreturn persons.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Log.i("MainActivity", "生成對象"+position);TextView tv=new TextView(getApplicationContext());Person person=persons.get(position);tv.setText(person.toString());return tv;}} }?
?
總結
以上是生活随笔為你收集整理的[android] listview入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础 Day14 泛型
- 下一篇: A*寻路算法所生成的路径