main.xml
<relativelayout android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<textview android:id="@+id/title"
android:layout_alignparenttop="true"
android:layout_height="wrap_content"
android:layout_torightof="@+id/imageView1"
android:layout_width="wrap_content"
android:text="TextView"></textview>
<textview android:id="@+id/info"
android:layout_alignparenttop="true"
android:layout_height="wrap_content"
android:layout_marginleft="15dp"
android:layout_torightof="@+id/title"
android:layout_width="wrap_content"
android:text="TextView"></textview>
<imageview android:id="@+id/imageView1"
android:layout_alignparentleft="true"
android:layout_aligntop="@+id/editText1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/icon"></imageview>
<button android:id="@+id/btnDetail"
android:layout_alignbaseline="@+id/editText1"
android:layout_alignbottom="@+id/editText1"
android:layout_alignparentright="true"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/row_detail"></button>
</relativelayout>
只定义了RelativeLayout等待被ListAdapter使用,有些网上的例子在定义这部分的时候.都设成TableLayout.我认为这里是不需要的.因为这里只是每一个view的内容.Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ruihui"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".AndUiActivity"
android:label="@string/app_name"
android:configChanges="orientation"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
接下来是2,定义activity,如下 AndUiActivity.java
package com.sample;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xml.sax.SAXException;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import com.ruihui.utils.TextXmlParser;
public class AndUiActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new InnerAdapter(this));
getListView().setBackgroundResource(R.drawable.android_bg_p);
}
public static class InnerAdapter extends BaseAdapter{
final private LayoutInflater inflater;
private DataHolder data;
public InnerAdapter(Context ctx){
inflater=LayoutInflater.from(ctx);
((ListActivity)ctx).setTitle("ListView example");
}
@Override
public int getCount() {
return 10;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int index, View view, ViewGroup vg) {
View vw;
if(view == null){
vw=inflater.inflate(R.layout.main, null);
} else {
vw=view;
}
TextView tv=(TextView) vw.findViewById(R.id.title);
tv.setText("code"+index);
tv = (TextView) vw.findViewById(R.id.info);
tv.setText("info"+index);
Button bt=(Button) vw.findViewById(R.id.btnDetail);
if(index %2 == 0)
vw.setBackgroundColor(Color.rgb(201, 210, 224));
else
vw.setBackgroundColor(Color.rgb(224, 200, 210));
return vw;
}
}
}
所有的关键是类InnerAdapter.java中.
getCount方法 定义了需要返回的view的数量. getItem和getItemId可以暂时忽略.
主要是getView.使用Inflater获取定义好的main.xml.然后根据index来定义好当前view的内容.在方法 .getView()中返回. 这样就可以最简单的方式定制一个有丰富内容的ListView了.简单解释一下:
index 当前的view的索引,
view 如果没有创建为 null. 如果有创建则为对象,
ViewGroup 本人暂时还不知道是什么.但是不影响现在这个例子.
内部的业务为.把相应的内容填充到view中.然后返回.就可以了.至于怎么在ListView中显示就交由系统完成.效果图
