Android ListView自定義佈局

本人,剛剛入行android,今天碰到ListView自定義佈局的問題,參考了些網上資料,終於實現了這一功能,別噴我,小弟是新手

我認爲最主要的是適配器的編寫,在這裏我們先寫個LIstview的佈局文件listview.xml

<?xml version="1.0" encoding="utf-8"?>
	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="horizontal" >
	<TextView
	android:id="@+id/item_tv"
	android:layout_width="0dp"
	android:layout_height="wrap_content"
	android:layout_weight="1"
	android:gravity="center_vertical"
	/>
	<TextView
	android:id="@+id/item_tv1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"

	android:gravity="center_vertical"
	/>
	</LinearLayout>


然後我們就開始編寫最主要部分了--適配器,集成BaseAdapter

public class ListViewAdapter extends BaseAdapter {
	
	//填充數據的List
	List<Map<String,Object>> list =new ArrayList<Map<String,Object>>();
	
	//上下文
	private Context context;
	
	//用來導入佈局
	private LayoutInflater inflater =null;
	
	//構造器
	public ListViewAdapter(List<Map<String,Object>> list,Context context){
		this.context=context;
		this.list=list;
		inflater=LayoutInflater.from(context);
	}
	
	

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		
			return list.get(arg0);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	//核心部分,返回Listview視圖
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder = null;
		
		if (convertView == null){
		holder=new ViewHolder();
		convertView =inflater.inflate(R.layout.listview, null);
		holder.tv=(TextView)convertView.findViewById(R.id.item_tv);
		holder.tv1=(TextView)convertView.findViewById(R.id.item_tv1);
		//爲view設置標籤
		convertView.setTag(holder);
		}else{
			holder=(ViewHolder)convertView.getTag();
		}	
	
			holder.tv.setText(list.get(position).get("text").toString());
			holder.tv1.setText(list.get(position).get("text1").toString());
		
		return convertView;
		
	}
	
	 
	
	
	 static class ViewHolder { 
		 TextView tv;
		  TextView tv1;

         } 


}




接下來是在Activity中實現整體功能了

public class OneTreasureActivity extends Activity {
	
	private ListView lv;
	private ListViewAdapter lvAdapter;
	List<Map<String,Object>> list =new ArrayList<Map<String,Object>>();
//	private ArrayList<String> list;
	
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv = (ListView) findViewById(R.id.CapsuleListView);
      //  list=new ArrayList<Map<String,Object>>();
        initDate();
        lvAdapter =new ListViewAdapter(list,this);
        lv.setAdapter(lvAdapter);
      
    }
	
	//爲了省事,這裏就不改了,大概就是請求數據,返回json值進行解析
	private void initDate() {
		// TODO Auto-generated method stub
		list=getCapsuleListData("servlet/ShowCapsuleServlet.do");
		
	}
	public void onetreasuremorebtn(View v){
		Intent intent = new Intent (OneTreasureActivity.this,OneTreasureMore.class);			
		startActivity(intent);	
	}
	
	
	public List<Map<String,Object>> getCapsuleListData(String s){
    	Map<String,Object> map =new HashMap<String,Object>();
    	  try{
    		  String url=HttpUtil.BASE_URL+s;
    		  String body=HttpUtil.queryStringForPost(url);
				JSONArray array=new JSONArray(body);
				list.clear();
    		    for(int i=0;i<array.length();i++){
    		    	JSONObject obj=array.getJSONObject(i);
    		    	map.put("text",obj.getString("text"));
    		    	map.put("text1", obj.getString("text1"));
    		        list.add(map);		 
    		    	map =new HashMap<String,Object>(); 	
    		    }	 
    		   
    		    }catch(Exception e){
    		     e.printStackTrace();
    		    }
    	  return list;
    
    }
	

}



就這樣listview自定義佈局完成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章