安卓ListView操作的兩種方法


舉例做一個微信的中間部分(好友消息等信息通知)

第一種:BaseAdapter()

package com.example.wx;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import wx.aa;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;


public class MainActivity extends Activity {

private ListView lv;
private List<aa> li=new ArrayList<aa>();//為方法一創建一個集合 ,aa類名
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.weixin);
lv=(ListView)findViewById(R.id.listView1);   //找到listvie控件

for( int i=0;i<100;i++)      //模擬讀取數據庫或者互聯網添加100條數據
//為方法一
aa a=new aa();
a.setTou1("sss");
a.setUserName("張三"+i);
a.setLastMessage("晚上有約");
a.setDatetime("11月11日");
li.add(a);
}

//使用BaseAdapter()

lv.setAdapter(new BaseAdapter() {

@Override

//只是一個顯示多少條數據的方法(這里我們直接返回li.size()就是集合的個數100條)
public int getCount() {
// TODO Auto-generated method stub
return li.size();
}
@Override

//操作listview的item項 也就是一行一行的數據方法(里面包含多個控件)
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi=null;  //定義一個View 
if (convertView==null)  //如果緩存為空,我們生成新的布局作為1個item
{
Log.i("info:","沒有緩存,重新生成"+position);
LayoutInflater inflater=MainActivity.this.getLayoutInflater();

//因為getView()返回的對象,adapter會自動賦給ListView,  R.layout.listview_item_layout是布局文件
vi=inflater.inflate(R.layout.listview_item_layout, null);
}
else
{
Log.i("info:","有緩存"+position);
vi=convertView;
}
//獲取集合
aa a=li.get(position);
//找到item里面的所有控件綁定數據
TextView name=(TextView)vi.findViewById(R.id.textView1);  //名字
name.setText(a.getUserName());//賦值
TextView messge=(TextView)vi.findViewById(R.id.t2); //最后一條消息
messge.setText(a.getLastMessage());
TextView datetime=(TextView)vi.findViewById(R.id.t3); //時間
datetime.setText(a.getDatetime());
return vi; //最后返回

}

運行截圖

 

第二種方法SimpleAdapter()

 

package com.example.wx;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import wx.aa;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;


public class MainActivity extends Activity {

private ListView lv;
private SimpleAdapter sa; //創建一個SimpleAdapter
private List<Map<String,Object>> li2=new ArrayList<Map<String,Object>>();  //為方法二創建另一個集合
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.weixin);
lv=(ListView)findViewById(R.id.listView1);

for( int i=0;i<100;i++)
{
Map<String,Object> item=new HashMap<String,Object>();
item.put("tuo", R.drawable.tou1);
item.put("name", "張三");
item.put("messge", "今晚有約");
item.put("datetime", "11月11日");
li2.add(item);
}
//第二種方法使用BaseAdapter() ,里面有五個參數 第一個上下文this,第二個data數據源,第三個布局文件,第四個from從哪里來,第五個to往哪里去(也就是綁定控件)
sa=new SimpleAdapter(
this,
li2,
R.layout.listview_item_layout,
new String[]{"tuo","name","messge","datetime"},
new int[]{R.id.imageView1,R.id.textView1,R.id.t2,R.id.t3});
lv.setAdapter(sa);

 

最后運行也是一樣的

 

兩種方法各有差異第一種推薦使用,第二種代碼量比較少,看個人喜號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM