本人,剛剛入行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;
}
}
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自定義佈局完成