天天看點

ListView和BaseAdapter結合使用

我是個新手,為了加深對ListView和BaseAdapter的了解,寫了這個部落格。

   1.在activity_main.xml中添加ListView,代碼如下:

<?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"
>
<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/list_view"/>
</LinearLayout
           

2.在layout目錄下建立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"
    android:orientation="horizontal">
    <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:id="@+id/fruit_image"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fruit_name"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"
        />

</LinearLayout>
           

3.下一步建立加載資料的Fruit類了,在com.example.administrator.(..)下,右鍵點new-java class 建立Fruit類

代碼:

package com.example.administrator.listviewtest;
//你設計多少元件,你就聲明多少個對象
//這也是你連結清單(LinkedList<>)的格式
public class Fruit {
    private String aName;
    private int aImageId;
    public Fruit(){
    }
  public Fruit(String aName,int aImageId){
        this.aName=aName;
        this.aImageId=aImageId;
    }
    public String getaName(){
        return aName;
    }
    public int getaImageId()
    {
        return aImageId;
    }
    public void setaName(String aName){
        this.aName=aName;
    }
    public void  setaImageId(int aImageId){
        this.aImageId=aImageId;
    }
}
           

4.這一步就要建立适配了,我用了最常用的BaseAdapter擴充卡,其實精通這一個就好了。

package com.example.administrator.listviewtest;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.LinkedList;
import java.util.List;

public class FruitAdapter extends BaseAdapter {
    //聲明一個連結清單和Context對象
    private LinkedList<Fruit> mList;
    private Context mContext;
    public FruitAdapter(LinkedList<Fruit> mList,Context mContext){
        this.mList=mList;
        this.mContext=mContext;
    }
    @Override
    //擷取資料的數量
    public int getCount(){
        return mList.size();
    }
    @Override
    //擷取資料的内容
    public Object getItem(int position){
        return  null;
    }
    @Override
    //擷取資料的id
    public long getItemId(int position){
        return position;

    }
    @Override
    
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        //加載一個擴充卡界面
        convertView=LayoutInflater.from(mContext).inflate(R.layout.fruit_item,parent,false);
        //執行個體化元件
        ImageView image=(ImageView) convertView.findViewById(R.id.fruit_image);
        TextView text=(TextView) convertView.findViewById(R.id.fruit_name);
        //元件擷取資料
        image.setImageResource(mList.get(position).getaImageId());
       text.setText(mList.get(position).getaName());
        return convertView;
    }
}
           

5.最後隻要配置一下MainActivity.java就可以了

package com.example.administrator.listviewtest;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

   private LinkedList<Fruit> mList=null;
   private  ListView listView;
   private Context mContext;
   private FruitAdapter adapter=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext=MainActivity.this;
        listView=(ListView) findViewById(R.id.list_view);
        mList = new LinkedList<Fruit>();//執行個體化LinkedList
        mList.add(new Fruit("葡萄",R.drawable.fruit1));//增加資料到連結清單
        mList.add(new Fruit("西瓜",R.drawable.fruit2));
        mList.add(new Fruit("杏子",R.drawable.fruit3));
        adapter=new FruitAdapter((LinkedList<Fruit>)mList,mContext);//設定擴充卡
        listView.setAdapter(adapter);//ListView設定擴充卡
    }
}
           

6.效果如下

ListView和BaseAdapter結合使用