记录RecycleView的使用

RecyclerView是一种显示多条信息的控件,平时QQ,微信的聊天界面以及微博浏览信息的界面都是使用RecyclerView实现的。
本文使用的RecyclerView是使用的androidx包下的控件,因为之前的support包比较混乱,所以Android已经开始使用androidx包来取代。
1.RecyclerView配置
要使用RecyclerView需要自己配置,只需要在布局文件下切换至布局管理器就可以下载配置了。配置RecyclerView
点击RecyclerView旁边的下载按钮即可自动配置好,然后就可以进行使用了。
2.RecyclerView的使用
在布局文件中引用,完整的布局文件如下
`<?xml version="1.0" encoding="utf-8"?>

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/account_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

然后写一个RecyclerView的适配器来填充数据,在此之前还需要写一个RecyclerView填充项目的布局文件和实体类。 项目布局文件:<?xml version="1.0" encoding="utf-8"?>

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TableRow>
        <ImageView
            android:id="@+id/app_icon"
            />
        <TextView
            android:id="@+id/app_name"
            />
    </TableRow>
    <TableRow>
        <TextView
            android:text="@string/account"
            />
        <TextView
            android:id="@+id/account"
            />
        <TextView
            android:text="@string/password"
            />
        <TextView
            android:id="@+id/password"
            />
    </TableRow>
</TableLayout>

`

实体类:`public class AccountMessage {
private byte[] appIcon;
private String appName;
private String account;
private String password;

public AccountMessage(){}

public AccountMessage(byte[] appIcon, String appName, String account, String password) {
    this.appIcon = appIcon;
    this.appName = appName;
    this.account = account;
    this.password = password;
}

public byte[] getAppIcon() {
    return appIcon;
}

public void setAppIcon(byte[] appIcon) {
    this.appIcon = appIcon;
}

public String getAppName() {
    return appName;
}

public void setAppName(String appName) {
    this.appName = appName;
}

public String getAccount() {
    return account;
}

public void setAccount(String account) {
    this.account = account;
}

public String getPassword() {
    return password;
}

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

}
适配器:适配器继承自RecyclerView的适配器类,使用ViewHolder来降低绑定布局的频率,提高RecyclerView的使用效率。适配器类如下: class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this)
.inflate(R.layout.item_account, parent, false));
return holder;
}

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.appIconView.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher1));
        holder.appNameTV.setText(mAccount.get(position).getAppName());
        holder.accountTV.setText(mAccount.get(position).getAccount());
        holder.passwordTV.setText(mAccount.get(position).getPassword());
    }

    @Override
    public int getItemCount() {
        return mAccount.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        ImageView appIconView;
        TextView appNameTV;
        TextView accountTV;
        TextView passwordTV;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            appIconView = (ImageView) itemView.findViewById(R.id.app_icon);
            appNameTV = (TextView) itemView.findViewById(R.id.app_name);
            accountTV = (TextView) itemView.findViewById(R.id.account);
            passwordTV = (TextView) itemView.findViewById(R.id.password);
        }
    }
}`
然后进行RecyclerView的绑定即可:` mAccountRecycleView = (RecyclerView) findViewById(R.id.account_list);
    mAccountRecycleView.setLayoutManager(new LinearLayoutManager(this));
    myAdapter = new MyAdapter();
    mAccountRecycleView.setAdapter(myAdapter);`
    至此,一次完整的RecyclerView的使用就结束了。完整的MainActivity的代码如下`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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.lvlin.passwordmanager.model.AccountMessage;

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

public class MainActivity extends AppCompatActivity {

private RecyclerView mAccountRecycleView;
private List<AccountMessage> mAccount;
private MyAdapter myAdapter;


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

    initData();
    initView();
}

private void initView() {
    mAccountRecycleView = (RecyclerView) findViewById(R.id.account_list);
    mAccountRecycleView.setLayoutManager(new LinearLayoutManager(this));
    myAdapter = new MyAdapter();
    mAccountRecycleView.setAdapter(myAdapter);
}

private void initData() {
    mAccount = new ArrayList<AccountMessage>();
        AccountMessage accountMessage = new AccountMessage(null, "QQ", "1064968931", "123456" );
        AccountMessage accountMessage1 = new AccountMessage(null, "QQ1", "1064968931", "123456" );
        mAccount.add(accountMessage);
        mAccount.add(accountMessage1);
}

class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this)
        .inflate(R.layout.item_account, parent, false));
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.appIconView.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher1));
        holder.appNameTV.setText(mAccount.get(position).getAppName());
        holder.accountTV.setText(mAccount.get(position).getAccount());
        holder.passwordTV.setText(mAccount.get(position).getPassword());
    }

    @Override
    public int getItemCount() {
        return mAccount.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        ImageView appIconView;
        TextView appNameTV;
        TextView accountTV;
        TextView passwordTV;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            appIconView = (ImageView) itemView.findViewById(R.id.app_icon);
            appNameTV = (TextView) itemView.findViewById(R.id.app_name);
            accountTV = (TextView) itemView.findViewById(R.id.account);
            passwordTV = (TextView) itemView.findViewById(R.id.password);
        }
    }
}

}`

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值