美文网首页
Android_listView(模拟QQ列表)

Android_listView(模拟QQ列表)

作者: 书虫大王X | 来源:发表于2019-11-24 22:28 被阅读0次

本篇文字用到的主要知识点:listViewMVC设计模式

代码MVC框架:
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>

下面是项目的成果:

成果展示

相关文章

网友评论

      本文标题:Android_listView(模拟QQ列表)

      本文链接:https://www.haomeiwen.com/subject/vedrwctx.html