效果图
Fruit.java entity类
package cf.icbd.anapp.entity;
/**
* Created by baodong on 7/3/15.
*/
public class Fruit {
private String name;
private int imageID;
public Fruit(String name, int imageID) {
this.imageID = imageID;
this.name = name;
}
public String getName() {
return name;
}
public int getImageID() {
return imageID;
}
}
fruit_item.xml 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/fruit_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
/>
</LinearLayout>
FruitAdapter.java 继承ArrayAdapter
package cf.icbd.anapp.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import cf.icbd.anapp.R;
import cf.icbd.anapp.entity.Fruit;
/**
* Created by baodong on 7/3/15.
*/
public class FruitAdapter extends ArrayAdapter<Fruit> {
private int mResourceID ;
public FruitAdapter(Context context, int resource, List<Fruit> objects) {
super(context, resource, objects);
mResourceID = resource;
}
/*
重写了 getView()方法,这个方法在每个子项被滚动到屏幕内的时候会被调用。
在 getView 方法中,首先通过 getItem()方法得到当前项的 Fruit 实例,
然后使用 LayoutInflater 来为这个子项加载我们传入的布局,
接着调用 View 的 findViewById()方法分别 获取到 ImageView 和 TextView 的实例,
并分别调用它们的 setImageResource()和 setText()方 法来设置显示的图片和文字,
最后将布局返回。
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//获得当前fruit实例
Fruit fruit = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(mResourceID, null);
TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
fruitName.setText(fruit.getName());
ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
fruitImage.setImageResource(fruit.getImageID());
return view;
}
}
activity_fruit_list.xml 活动布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id="@+id/fruit_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
FruitListActivity.java 活动类
package cf.icbd.anapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import cf.icbd.anapp.adapter.FruitAdapter;
import cf.icbd.anapp.entity.Fruit;
public class FruitListActivity extends Activity {
private List<Fruit> fruitList = new ArrayList<Fruit>();
private void initFruits() {
Fruit apple = new Fruit("Apple", R.drawable.apple_pic);
fruitList.add(apple);
Fruit banana = new Fruit("Banana", R.drawable.banana_pic);
fruitList.add(banana);
Fruit orange = new Fruit("Orange", R.drawable.orange_pic);
fruitList.add(orange);
Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic);
fruitList.add(watermelon);
Fruit pear = new Fruit("Pear", R.drawable.pear_pic);
fruitList.add(pear);
Fruit grape = new Fruit("Grape", R.drawable.grape_pic);
fruitList.add(grape);
Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic);
fruitList.add(pineapple);
Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic);
fruitList.add(strawberry);
Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic);
fruitList.add(cherry);
Fruit mango = new Fruit("Mango", R.drawable.mango_pic);
fruitList.add(mango);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fruit_list);
initFruits();
FruitAdapter adapter = new FruitAdapter(FruitListActivity.this, R.layout.fruit_item, fruitList) ;
ListView listView = (ListView) findViewById(R.id.fruit_list_view) ;
listView.setAdapter(adapter) ;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_fruit_list, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
参考《第一行代码》
getView改进
package cf.icbd.anapp.adapter;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import cf.icbd.anapp.R;
import cf.icbd.anapp.entity.NationFlag;
/**
* Created by baodong on 7/6/15.
*/
public class NationFlagAdapter extends ArrayAdapter<NationFlag> {
int mNationFlagItem ; //指向列表布局,传参为:nationflag_item.xml
public NationFlagAdapter(Context context, int resource, List<NationFlag> objects) {
super(context, resource, objects);
mNationFlagItem = resource ;
}
/**
* getView在每次展示时都要调用,findViewById比较消耗资源,用单例模式改进
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//根据滚动位置,获取当前列表的行实例
NationFlag nationFlag = getItem(position) ;
//压入列表布局
View view ;
ViewStruct viewStruct ;
if(convertView == null){
//新建view
view = LayoutInflater.from(getContext()).inflate(mNationFlagItem, null) ;
viewStruct = new ViewStruct() ;
viewStruct.imageView = (ImageView) view.findViewById(R.id.nationImage) ;
viewStruct.textView = (TextView) view.findViewById(R.id.nationName) ;
view.setTag(viewStruct) ;
Log.d("cbd", "setTag") ;
}else {
//调用已有的view
view = convertView ;
viewStruct = (ViewStruct) view.getTag();
}
viewStruct.imageView.setImageResource(nationFlag.getResourceID()) ;
viewStruct.textView.setText(nationFlag.getNationName()) ;
// //设置列表内容
// TextView textView = (TextView) view.findViewById(R.id.nationName);
// textView.setText(nationFlag.getNationName()) ;
// ImageView imageView = (ImageView) view.findViewById(R.id.nationImage);
// imageView.setImageResource(nationFlag.getResourceID()) ;
return view ;
}
/**
* 内部类
*/
class ViewStruct{
ImageView imageView ;
TextView textView ;
}
}