Loading

RecyclerView-实现ListView效果

在Android开发中,我们经常需要实现这样一个下拉的浏览列表:这非常有用,典型的例子就是我们的微信好友列表,

可以显示出好友的头像昵称等,还能点击实现更多功能,今天我学习了一个非常有用也是实际开发中大量应用的组件RecyclerView

我的练习项目效果图如图所示,可以看到实现了下拉浏览,显示图片和文字

 

 实现代码。今天听的一位老师的网络课程,讲解的非常详细,我也跟着把注释都写了下来,更容易理解。

MainActivity

package com.example.recyclertest;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.example.recyclertest.adapter.ListViewAdapter;
import com.example.recyclertest.beans.Datas;
import com.example.recyclertest.beans.ItemBean;

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

public class MainActivity extends AppCompatActivity {

    private RecyclerView mList;
    private List<ItemBean> mData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mList = (RecyclerView) this.findViewById(R.id.recycler_view);
        //准备数据
        initDate();
    }

    /**
     * 模拟数据
     * **/
    private void initDate() {
        //List<DataBea>---->Adapter------>setAdapter------>显示数据
        mData = new ArrayList<>();

        for (int i = 0; i < Datas.icons.length; i++) {

            ItemBean data = new ItemBean();

            data.icon = Datas.icons[i];
            data.title= "我是第 "+i+" 个条目";
            mData.add(data);
        }

        //RecyclerView需要设置样式,其实就是设置布局管理器
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        mList.setLayoutManager(linearLayoutManager);
        //创建适配器
        ListViewAdapter adapter = new ListViewAdapter(mData);
        //设置到RecyclerView里去
        mList.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //菜单的方法
        //ctrl+p看方法参数ctrl+alt+p设置成成员变量
        getMenuInflater().inflate(R.menu.menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        //子菜单return super.onOptionsItemSelected(item);
    }

}

ItemBean

package com.example.recyclertest.beans;

public class ItemBean {
    public int icon;
    public String title;
}

Datas

package com.example.recyclertest.beans;

import com.example.recyclertest.R;
public class Datas {
    public static int[] icons = {

            R.mipmap.pic_1,
            R.mipmap.pic_2,
            R.mipmap.pic_3,
            R.mipmap.pic_4,
            R.mipmap.pic_5,
            R.mipmap.pic_6,
            R.mipmap.pic_7,
            R.mipmap.pic_8,
            R.mipmap.pic_9
    };
}

ListViewAdapter

package com.example.recyclertest.adapter;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.recyclertest.R;
import com.example.recyclertest.beans.ItemBean;

import java.util.List;

public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.InnerHolder> {

    private final List<ItemBean> mData;


    public ListViewAdapter(List<ItemBean> data){
        this.mData = data;
    }
    //这个方法用于创建条目View
    @NonNull
    @Override
    public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        //传进去的View就是条目的界面
        //拿到view
        View view = View.inflate(parent.getContext(), R.layout.item_list_view, null);
        //创建InnerHolder
        return new InnerHolder(view);
    }
    //这个方法用于绑定Holder,一般用来设置数据
    @Override
    public void onBindViewHolder(@NonNull InnerHolder holder, int position) {
        //在这里设置数据
        holder.setData(mData.get(position));
    }

    //返回条目的个数
    @Override
    public int getItemCount() {
        if (mData != null) {
            return mData.size();
        }
        return 0;
    }

    public class InnerHolder extends RecyclerView.ViewHolder {

        private TextView mTitle;
        private ImageView mIcon;

        //
        public InnerHolder(@NonNull View itemView) {
            super(itemView);
            //找到条目的控件
            mIcon = itemView.findViewById(R.id.list_view_icon);
            mTitle = itemView.findViewById(R.id.list_view_title);
        }
        //此方法用于设置数据
        public void setData(ItemBean itemBean) {
            //设置数据
            mIcon.setImageResource(itemBean.icon);
            mTitle.setText(itemBean.title);
        }
    }

}

 

 

 同时我把我的桌面图标截图当作图片素材

 

posted @ 2023-03-07 21:25  冰稀饭Aurora  阅读(61)  评论(0编辑  收藏  举报