我是個新手,為了加深對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.效果如下