RecyclerView和SwipeRefreshLayout的使用

RecyclerView

RecyclerView支持库包含在sdk目录下,具体在 sdk\extras\android\support\v7\recyclerview,在Android studio 中直接在 build 文件中添加如下语句即可使用
compile 'com.android.support:recyclerview-v7:23.+'
当然,直接在app目录下的libs中添加RecyclerView的JAR包,并 Add As Library 就可以使用了。
  • 在 main_layout.xml文件中添加RecyclerView控件
 <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycleview">
    </android.support.v7.widget.RecyclerView>
  • 在Activity中设置一些关键属性
recyclerView =(RecyclerView)findViewById(R.id.recycleview);

//如果可以确定每个Item的高度固定,选用这个属性可以提高性能
recyclerView.setHasFixedSize(true);

//使用默认的LayoutManager
recyclerView.setLayoutManager(new LinearLayoutManager(this));

//使用默认的动画效果
recyclerView.setItemAnimator(new DefaultItemAnimator());

//为RecycleView设置Adapter
recyclerView.setAdapter(adapter);

关于更多这些属性的介绍,可以参考

http://blog.iderzheng.com/first-date-with-recyclerview/

想要使用RecyclerView就必须要涉及到Adapter的创建,为了响应Item的点击事件,首先定义好两个接口,以响应点击事件和长点击事件。

public interface LongClick {
    public void onItemClick(View view,int position);
}

public interface ShortClick {
    public void onItemClick(View view,int position);
}

自定义ViewHolder供Adapter高效获取每个 Item视图,因为ViewHolder能够直接获取到Item,所以将点击事件写在这里

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener {

    public TextView textView;
    private LongClick longClick;
    private ShortClick shortClick;

    public MyViewHolder(View itemView,LongClick longClick,ShortClick shortClick) {
        super(itemView);

        textView = (TextView) itemView.findViewById(R.id.cv_text);
        this.longClick = longClick;
        this.shortClick = shortClick;

        textView.setOnClickListener(this);
        textView.setOnLongClickListener(this);
    }

    @Override
    public void onClick(View view) {

        if (shortClick != null){

            shortClick.onItemClick(view,getPosition());
        }
    }

    @Override
    public boolean onLongClick(View view) {

        if (longClick != null){

            longClick.onItemClick(view,getPosition());
        }
        return true;
    }
}

自定义Adapter要继承RecyclerView.Adapter,并实现其下的三个Implements methods

  • public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
  • public void onBindViewHolder(MyViewHolder holder, int position)
  • public int getItemCount()

由此,Adapter写法可以为

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{

    private List<String> data;
    private ShortClick shortClick;
    private LongClick longClick;

    public MyAdapter(List<String> data){
        this.data = data;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout,parent,false);
        MyViewHolder holder = new MyViewHolder(view,longClick,shortClick);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.textView.setText(data.get(position));
    }

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

    public void setOnItemClickListener(ShortClick shortClick){
        this.shortClick = shortClick;
    }

    public void serOnItemLongClickListener(LongClick longClick){

        this.longClick = longClick;
    }
}

之后再Activity就可以定义Adapter,并实现点击事件和长点击事件的方法

adapter = new MyAdapter(data);
adapter.serOnItemLongClickListener(new LongClick() {
      @Override
      public void onItemLongClick(View view, int position) {
            data.remove(position);
            adapter.notifyItemRemoved(position);
         }
      });
adapter.setOnItemClickListener(new ShortClick() {
          @Override
          public void onItemClick(View view, int position) {
              Snackbar snackbar =Snackbar.make(recyclerView,data.get(position),Snackbar.LENGTH_LONG);
              snackbar.show();
            }
        });
recyclerView.setAdapter(adapter);

CardView的简单使用

在 build 文件中添加

compile 'com.android.support:cardview-v7:23.+'

就可以使用CardView了

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_margin="10dp"
    app:contentPadding="10dp"
    app:cardCornerRadius="10dp"
    app:cardElevation="5dp"
    app:cardBackgroundColor="#1291a9">

</android.support.v7.widget.CardView>
  • contentPadding 属性可以设置内容与内边距
  • cardCornerRadius 属性可以设置圆角的大小
  • cardElevation 属性可以设置阴影的大小
  • cardBackgroundColor 属性可以设置卡片的背景颜色

SwipeRefreshLayout的简单使用

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipeRefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

SwipeRefreshLayout 有四个基本方法可供设置

  1. setOnRefreshListener(OnRefreshListener listener) 设置下拉监听,当用户下拉的时候会去执行回调
  2. setColorSchemeColors(int… colors) 设置 进度条的颜色变化,最多可以设置4种颜色
  3. setProgressViewOffset(boolean scale, int start, int end) 调整进度条距离屏幕顶部的距离
  4. setRefreshing(boolean refreshing) 设置SwipeRefreshLayout当前是否处于刷新状态,一般是在请求数据的时候设置为true,在数据被加载到View中后,设置为false。

下面就到Activity去获取并设置这些方法

swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeRefresh);

        swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary,R.color.colorAccent,R.color.colorPrimaryDark);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                refreshContent();
            }
        });




private void refreshContent() {

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                data.add("Hello");
                adapter.notifyItemInserted(data.size());
                swipeRefreshLayout.setRefreshing(false);//用于将刷新的旋转按钮隐藏,如果不调用该条语句,刷新旋转按钮会一直存在
            }
        },3000);
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值