Android入门练习——ArrayAdapter绑定ListView

碎碎念:
越学Android越觉得有意思啊,以前觉得java很枯燥,现在倒是有点后悔之前的基础没打好了,好了以后一边补漏洞一边学吧~


什么是Adapter?
简单来说就是连接前端UI和后端数据的一座桥梁。
有很多种不同类型的Adapter,本片介绍的是最常用的一种——ArrayAdapter,(其他种类的之后再整理)。

案例实现
Android入门练习——ArrayAdapter绑定ListView
实现步骤:
1 在activity_main.xml中布局一个ListView

<ListView
        android:id="@+id/list_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

2 新建一个xml,命名为 fruit_item.xml,里面用来布局一项list,即一个图片一串文字

<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"
	    />

3 新建一个class文件fruit.java 用来定义水果的名称和图片名称

public class Fruit {
	private String name;
	private int imageID;
	
	public Fruit(String name, int imageId){
		this.name= name;
		this.imageID=imageId;
	}
	public String getName(){
		return name;
	}
	public int getimageID(){
		return imageID;
	}
}

4 自定义一个adapter并继承ArrayAdapter

public class FruitAdapter extends ArrayAdapter<Fruit>{
	private int resourceId;
	public FruitAdapter(Context context, int resource, List<Fruit> objects) {
		super(context, resource, objects);
		// TODO Auto-generated constructor stub
		resourceId=resource;
	}
	//重写getView方法,getView方法在每个item显示时都被调用
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		//获取当前项Fruit的实例,通过 List<Fruit> objects
		Fruit fruit=getItem(position);
		//将xml布局文件实例化为一个view
		View view=LayoutInflater.from(getContext()).inflate(resourceId, null);//why null? 父元素值
		//实例化水果布局xml中的组件
		ImageView fruitImage=(ImageView)view.findViewById(R.id.fruit_image);
		TextView fruitNmae=(TextView)view.findViewById(R.id.fruit_name);
		fruitImage.setImageResource(fruit.getimageID());
		fruitNmae.setText(fruit.getName());
		return view;
	}
}

5 在MainActivity.java中实例化Fruit对象,并用适配器连接前面的UI,即可完成。

public class MainActivity extends Activity {
	private List<Fruit> fruitList=new ArrayList<Fruit>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Fruit apple=new Fruit("Apple",R.drawable.apple);
        fruitList.add(apple);
        
        Fruit banana=new Fruit("Banana",R.drawable.banana);
        fruitList.add(banana);
        
        Fruit orange=new Fruit("Orange",R.drawable.orange);
        fruitList.add(orange);
        
        Fruit watermelon=new Fruit("Watermelon",R.drawable.watermelon);
        fruitList.add(watermelon);
        
        FruitAdapter adapter=new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);
        ListView listView=(ListView)findViewById(R.id.list_view);
        listView.setAdapter(adapter);
    }
}

Reflection:
其实是今天刚学完这个adapter,再加上之前的Java基础忘得差不多,目前还没有完全把整个过程理解透,只是跟着老师敲了一遍代码,过几天再来看看加上练习,应该就可以消化了~