代码MVC框架:

在这个项目中,没有在MainActivity进行操作,而是创建一个wListView(图中的PXDListView)继承于ListView在xml布局中对其进行调用:
<xn.ky.a1123_listview_liebiao_3.wListView
android:id="@+id/lv_qqList"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
wListView类(功能相当于MVC中的控制器):
public class wListView extends ListView {
public wListView(Context context) {
this(context,null);
}
public wListView(Context context, AttributeSet attrs) {
super(context, attrs);
initData();
}
private void initData(){
// 设置适配器
setAdapter(new myAdapter());
}
private class myAdapter extends BaseAdapter {
@Override
public int getCount() {
// 向dataManager数据库请求listView的行数
return dataManager.shareManager.getDataSource().size();
}
@Override
public Object getItem(int i) {
return dataManager.shareManager.getDataSource().get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
// 向dataManager数据库请求view
FriendModel model = dataManager.shareManager.getDataSource().get(i);
friendItem item = new friendItem(getContext(),model);
return item.rootView;
}
}
}
dataManager类(管理数据):
public class dataManager {
// 保存所有数据
private ArrayList<FriendModel> dataSource;
// 单例
// 提供一个单例对象
public static final dataManager shareManager = new dataManager();
// 1、禁用构造方法
private dataManager(){
loadData();
}
// 加载数据
private void loadData(){
// 从DataUtils中获取数据
dataSource = DataUtils.loadCustomData();
}
public ArrayList<FriendModel> getDataSource() {
return dataSource;
}
}
DataUtils类(dataManager类中的数据来源于此处):
public class DataUtils {
/**
* 类方法:只关心这个方法本身(工具类中基本都使用此方法)
* 对象方法:数据需要对象存储
*/
// 自己构造数据
public static ArrayList<FriendModel> loadCustomData(){
ArrayList<FriendModel> friendModels = new ArrayList<>();
for(int i = 0;i < 30 ; i ++){
// 在创建数据时用FriendModel模型进行封装,方便之后调用
FriendModel model = new FriendModel(R.drawable.a,"系统开发");
friendModels.add(model);
}
return friendModels;
}
}
friendItem类(具体的创建listView的每一个item):
public class friendItem {
// item对应的模型
private FriendModel model;
// item对应的图片
public View rootView;
// item对应的容器
private Context context;
// 创建的同时,将item显示需要的模型传递过来
public friendItem(Context context,FriendModel model){
this.model = model;
this.context = context;
initVIew();
}
private void initVIew() {
// 获取对应的容器视图
ViewGroup v = (ViewGroup)View.inflate(context,R.layout.layoutfriend,null);
// 将数据显示到这个容器对应的控件上
// 获取子视图
ImageView icon = v.findViewWithTag(context.getString(R.string.iTag));
TextView name = v.findViewWithTag(context.getResources().getString(R.string.nameTag));
// 显示数据
icon.setImageResource(model.iconID);
name.setText(model.name);
rootView = v;
}
}
FriendModel类(对数据进行封装):
public class FriendModel {
public int iconID;
public String name;
public FriendModel(int iconID,String name){
this.iconID = iconID;
this.name = name;
}
}
创建一个layout布局文件,对item的子空间进行布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<xn.ky.a1123_listview_liebiao_3.wImageVeiw
android:tag="@string/iTag"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="20dp"
android:scaleType="fitXY"
/>
<TextView
android:tag="@string/nameTag"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:gravity="center_vertical"
android:textColor="#000000"
android:textSize="30dp"
/>
</LinearLayout>
下面是项目的成果:

网友评论