使用android中的recylerView控件案例

RecyclerView的使用方法

标签: android


在使用recylerView的时候,我一直感觉这个控件使用起来比较复杂,所以要总结一下有关于这个控件的相关的知识,其实只要好好剖析一下安卓中有关于控件的知识会发现还是比较容易使用的。
1.添加依赖关系
首先,根据我个人的经验来感觉的话,如果要使用一个控件,首先要看这个控件是否存在于相关的包中,如果不存在的化就要在依赖中使用这个包,对于recyclerView也是一样的,首先要在和android项目中的app目录下的build.grandle文件里面添加相关的依赖关系:

compile 'com.android.support:recyclerview-v7:26.1.0'

其中依赖关系后面的数字代表使用的版本号,根据具体的使用可以进行调整。

2.在布局文件也就是相关的xml文件中使用recyclerView的控件,然后设置它的相关的属性,具体的属性和其它的ui控件差不多。相关的实例:

    <android.support.v7.widget.RecyclerView
        app:layout_constraintTop_toBottomOf="@id/divideLine"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_margin="@dimen/viewMargin"
        android:id="@+id/person_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="360dp">
    </android.support.v7.widget.RecyclerView>

3.定义recylerView控件的内部条目的样式,这里就可以有各种多样的设置了,自己可以自己定义相关的控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="60dp">
    <TextView
        android:id="@+id/item_name_main"
        android:layout_margin="@dimen/viewMargin"
        android:textSize="@dimen/textSize"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="姓名"
        android:layout_gravity="center"
        android:gravity="center"/>
    <TextView
        android:id="@+id/item_birthday_main"
        android:layout_margin="@dimen/viewMargin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_weight="1"
        android:textSize="@dimen/textSize"
        android:text="生日" />
    <TextView
        android:id="@+id/item_gift_main"
        android:layout_margin="@dimen/viewMargin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="@dimen/textSize"
        android:text="礼物"
        android:layout_gravity="center"
        android:gravity="center"/>
</LinearLayout>

4.然后就是配置recyclerView的相关的适配器了,配置的方法也是很简单的主要是实现RecyclerView.Adapter类,然后重载其中的onCreateViewHolder,onBindViewHolder,getItemCount方法,然后因为其中要用到ViewHolder所以要写一个ViewHolder的类用来存放临时的数据,其中每一个viewHolde就是recyclerView中的一个条目。相关的代码如下:

package com.example.dell_gxr.week10;

import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

/**
 * Created by dell_gxr on 2017/12/7.
 */

public  class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.PersonViewHolder> {

    private List<Person> mList;
    private PersonDatabase mDBHelper;
    @Override
    public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        final View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.main_item, parent, false);
        final PersonViewHolder holder = new PersonViewHolder(view);
        final int position = holder.getAdapterPosition();
        Log.d("PersonAdapter","on create number: " + Integer.toString(position));



        return holder;
    }

    @Override
    public void onBindViewHolder(PersonViewHolder holder, @SuppressLint("RecyclerView") final int position) {
        Log.d("PersonAdapter","on bind number: " + Integer.toString(position));
        Person current = mList.get(position);
        holder.name.setText(current.getName());
        holder.birthday.setText(current.getBirthday());
        holder.gift.setText(current.getGift());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final View view1 = LayoutInflater.from(v.getContext())
                        .inflate(R.layout.modify_dialog, null);
                TextView textView1 = view1.findViewById(R.id.modify_dialog_name_textView);
                TextView textView2 = view1.findViewById(R.id.modify_dialog_number_textView);
                textView1.setText("姓名:" + mList.get(position).getName());
                textView2.setText("手机号码:" + mList.get(position).getNumber());
                EditText editText1 = view1.findViewById(R.id.modify_dialog_birthday_EditText);
                EditText editText2 = view1.findViewById(R.id.modify_dialog_gift_EditText);
                editText1.setText(mList.get(position).getBirthday());
                editText2.setText(mList.get(position).getGift());
                AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                builder.setTitle("快乐每天!");
                builder.setView(view1);
                builder.setCancelable(true);
                builder.setPositiveButton("保存修改", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        EditText editText1 = view1.findViewById(R.id.modify_dialog_birthday_EditText);
                        EditText editText2 = view1.findViewById(R.id.modify_dialog_gift_EditText);

                        if(TextUtils.isEmpty(editText1.getText().toString())) {
                            mList.get(position).setBirthday("");
                        } else {
                            mList.get(position).setBirthday(editText1.getText().toString());
                        }
                        if(TextUtils.isEmpty(editText2.getText().toString())) {
                            mList.get(position).setGift("");
                        } else {
                            mList.get(position).setGift(editText2.getText().toString());
                        }
                        notifyDataSetChanged();
                        Toast.makeText(view1.getContext(), "修改成功", Toast.LENGTH_SHORT).show();
                        mDBHelper.update(mList.get(position));
                    }
                });
                builder.setNegativeButton("放弃修改", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
                builder.show();
            }
        });
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(final View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                builder.setTitle("是否删除?");
                builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        mDBHelper.delete(mList.get(position));
                        mList.remove(position);
                        notifyDataSetChanged();
                        Toast.makeText(v.getContext(), "成功删除", Toast.LENGTH_SHORT).show();
                    }
                });
                builder.setNegativeButton("否", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(v.getContext(), "取消删除", Toast.LENGTH_SHORT).show();
                    }
                });
                builder.show();
                return false;
            }
        });
    }

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

    PersonAdapter(List<Person> tList, PersonDatabase dbHelper) {
        super();
        mList = tList;
        mDBHelper = dbHelper;
    }

    class PersonViewHolder extends RecyclerView.ViewHolder {
        TextView name;
        TextView birthday;
        TextView gift;

        public PersonViewHolder(View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.item_name_main);
            birthday = itemView.findViewById(R.id.item_birthday_main);
            gift = itemView.findViewById(R.id.item_gift_main);

        }
    }
}

5.最后就是在主活动为相应的recyclerView使用这个适配器了,注意要在使用适配器的过程中设置相应的Layout,这样才能使得recylerView正常显示:

public void initItem() {

        RecyclerView recyclerView = findViewById(R.id.person_recyclerView);
        PersonAdapter personAdapter = new PersonAdapter(allList, dbHelper);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);

        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(personAdapter);
        recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值