Android学习之RecyclerView

Android 第二次作业:RecyclerView

结果展示:

截图

代码过程

xml文件

1.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="wrap_content"
    android:background="@drawable/corner"
    android:padding="10dp"
    android:layout_margin="8dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textView_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="TextView"
        android:paddingLeft="15dp"
        android:textSize="30sp" />

    <Space
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:maxWidth="32dp"
        android:maxHeight="32dp"
        android:scaleType="fitCenter"
         />
</LinearLayout>

Java文件

1.新建适配器Adapter


public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {

    // 当前app 运行环境参数
    private Context context;
    private List<String> list;
    private List<Integer> imgList;

    private View inflater;

    public Adapter(Context context, List<String> list, List<Integer> imgList) {
        this.context = context;
        this.list = list;
        this.imgList = imgList;

        notifyDataSetChanged();
    }

    @Override
    public Adapter.MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        // item xml文件
        inflater = LayoutInflater.from(context).inflate(R.layout.item, viewGroup, false);
        MyViewHolder myViewHolder = new MyViewHolder(inflater);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(Adapter.MyViewHolder holder, int position) {
        // 将list 中的值绑定到 Adapter中
        holder.textView.setText(list.get(position));
        holder.imageView.setImageResource(imgList.get(position));
    }

    @Override
    public int getItemCount() {
        // 返回list的长度
        return list.size();
    }

    public void onItemDismiss(int position) {
        if (position < 0 || position > getItemCount()) {
            return;
        }

        list.remove(position);
        notifyItemRemoved(position);

        // 解决 RecyclerView 删除 Item 导致位置错乱的问题
        if(position != list.size()) {
            notifyItemRangeChanged(position, list.size() - position);
        }
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        TextView textView;
        public MyViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView_item);
            imageView = itemView.findViewById(R.id.imageView);
        }
    }

}

3.修改WechatFragment

public class WechatFragment extends Fragment {

    private View view;

    private RecyclerView recyclerView;
    private List<String> list;
    private List<Integer> imgList;
    private Context context;
    private Adapter adapter;

    public WechatFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.tab_home, container, false);
        recyclerView = view.findViewById(R.id.recyclerView);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        context = (MainActivity)getActivity();

        initResource();

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);

        adapter = new Adapter(context, list, imgList);

        ItemTouchHelper.Callback callback = new SwipeItemTouchHelper(adapter);
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
        itemTouchHelper.attachToRecyclerView(recyclerView);

        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(adapter);
    }

    // 初始化各种资源
    private void initResource() {
        list = new ArrayList<>();
        imgList = new ArrayList<>();

        Map<Integer, String> map = new HashMap<>();


        map.put(R.drawable.friend, "我的朋友");
        map.put(R.drawable.address,"我的通讯录");
        map.put(R.drawable.xiaolan,"新兰永恒");
        map.put(R.drawable.tu,"新兰万岁");
        map.put(R.drawable.pian,"美");


        for (Integer key : map.keySet()) {
            list.add(map.get(key));
            imgList.add(key);
        }

    }

}

当然其中一些细微的布局问题我参考了网上的一些大佬的解决方案。
最后需要注意的一点是一开始是没有recyclerview这个包的,需要在build.gradle中的dependencies闭包中添加其依赖

 implementation 'androidx.recyclerview:recyclerview:1.1.0'

下面是新的内容在通讯录页面添加人物消息

核心代码:

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

        userAccounts=new ArrayList<>();
        myAdapter=new MyAdapter(this,userAccounts);
        recyclerView=findViewById(R.id .recyclerView);
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(OrientationHelper .VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(myAdapter);

        initView();
        initFragment();


        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                View view1= LayoutInflater.from(MainActivity.this).inflate(R.layout.dialogview,null,false);
                final EditText edusername=view1.findViewById(R.id.ed_username);
                final EditText edpassword=view1.findViewById(R.id.ed_password);

                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("用户信息输入")
                        .setView(view1)
                        .setPositiveButton("添加", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                UserAccount userAccount=new UserAccount();
                                userAccount.setUsername(edusername.getText().toString().trim());
                                userAccount.setPassword(edpassword.getText().toString().trim());
                                userAccounts.add(userAccount);
                                myAdapter.notifyDataSetChanged();
                            }
                        }).setNegativeButton("取消",null).show();
            }
        });
    }

MyAdapter.java

package com.example.zzh;

import android.content.Context;
 import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.*;

import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<MyHolder> {
    private List<UserAccount>userAccounts;
    private Context mContext;

    public MyAdapter(Context context,List<UserAccount>userAccounts){
        mContext=context;
        this.userAccounts=userAccounts;
    }

      public MyHolder onCreateViewHolder(   ViewGroup viewGroup, int i) {
        View view= LayoutInflater.from(mContext).inflate(R.layout.itemview,null);
        MyHolder myHolder=new MyHolder(view);
        return myHolder;
    }

     public void onBindViewHolder(   MyHolder myHolder, int i) {
        ((TextView)myHolder.finViewById(R.id.tv_username)).setText(userAccounts.get(i).getUsername());
        ((TextView)myHolder.finViewById(R.id.tv_password)).setText(userAccounts.get(i).getPassword());
    }

     public int getItemCount() {
        return userAccounts.size();
    }
}

UserAccount:

package com.example.zzh;


public class UserAccount {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

参考链接:
RecyclerView

源码地址:
码云仓库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值