定义一个对象:
public class Weather {
public static final int NA = -1;
public static final int SUNNY = 0;
public static final int OVERCAST = 1;
public static final int RAIN = 2;
public String city = null;
public int temperature = 0;
public int sky = NA;
public Weather( String city, int temperature, int sky ) {
this.city = city;
this.temperature = temperature;
this.sky = sky;
}
public String getCity() {
return city;
}
public int getTemperature() {
return temperature;
}
public int getSkyResource() {
switch( sky ) {
case SUNNY:
return R.drawable.weather_sunny;
case OVERCAST:
return R.drawable.weather_overcast;
case RAIN:
return R.drawable.weather_rain;
}
return R.drawable.unknown;
}
}
主activity
public class CustomAdapterActivity extends ListActivity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<Weather> weatherList = new ArrayList<Weather>();
Weather w = new Weather( "London", 17, Weather.OVERCAST );
weatherList.add( w );
w = new Weather( "Paris", 22, Weather.OVERCAST );
weatherList.add( w );
w = new Weather( "Athens", 29, Weather.SUNNY );
weatherList.add( w );
w = new Weather( "Stockholm", 12, Weather.RAIN );
weatherList.add( w );
WeatherAdapter weatherAdapter = new WeatherAdapter(
this,
weatherList );
setListAdapter( weatherAdapter );
}
}
最关键的就是 WeatherAdapter
class WeatherAdapterView extends LinearLayout {
public static final String LOG_TAG = "WeatherAdapterView";
public WeatherAdapterView(Context context,
Weather weather ) {
super( context );
this.setOrientation(HORIZONTAL);
LinearLayout.LayoutParams cityParams =
new LinearLayout.LayoutParams(100, LayoutParams.WRAP_CONTENT);
cityParams.setMargins(1, 1, 1, 1);
TextView cityControl = new TextView( context );
cityControl.setTextAppearance( context, R.style.SpecialText );
cityControl.setText( weather.getCity() );
addView( cityControl, cityParams);
LinearLayout.LayoutParams temperatureParams =
new LinearLayout.LayoutParams(20, LayoutParams.WRAP_CONTENT);
temperatureParams.setMargins(1, 1, 1, 1);
TextView temperatureControl = new TextView(context);
temperatureControl.setText( Integer.toString( weather.temperature ) );
addView( temperatureControl, temperatureParams);
LinearLayout.LayoutParams skyParams =
new LinearLayout.LayoutParams(25, LayoutParams.WRAP_CONTENT);
ImageView skyControl = new ImageView( context );
Log.d( LOG_TAG, weather.getCity()+" -> "+weather.sky );
skyControl.setImageResource( weather.getSkyResource() );
addView( skyControl, skyParams );
}
}
public class WeatherAdapter extends BaseAdapter {
private Context context;
private List<Weather> weatherList;
public WeatherAdapter(Context context, List<Weather> weatherList ) {
this.context = context;
this.weatherList = weatherList;
}
public int getCount() {
return weatherList.size();
}
public Object getItem(int position) {
return weatherList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
Weather weather = weatherList.get(position);
return new WeatherAdapterView(this.context, weather );
}
}
通过定义一个对象 在这个对象中包含要显示的东西,这样就不用使用simpleAdapater了,不同的方法自己选择吧。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme.Light">
<item name="android:listViewStyle">@style/MyListView</item>
</style>
<style name="SpecialText" parent="@android:style/TextAppearance">
<item name="android:textSize">18sp</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">#008</item>
</style>
<style name="MyListView" parent="@android:style/Widget.ListView">
<item name="android:background">@color/opaque_red</item>
<item name="android:listSelector">@drawable/z_selector_background</item>
</style>
</resources>
别忘了在主xml中加入上面的主题。
源文件上传了 这里面也使用到了selector