本人,刚刚入行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自定义布局完成