Android应用开发之Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载
白羽 2018-08-10 来源 :网络 阅读 839 评论 0

摘要:本文将带你了解Android应用开发之Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载,希望本文对大家学Android有所帮助

        本文将带你了解Android应用开发之Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载,希望本文对大家学Android有所帮助


随着 Google 推出了全新的设计语言 Material Design,还迎来了新的 Android 支持库 v7,其中就包含了 Material Design 设计语言中关于 Card 卡片概念的实现 —— CardView。RecyclerView也是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视图缓存.
RecyclerView的优点就是,他可以通过设置LayoutManager来快速实现listview、gridview、瀑布流的效果,而且还可以设置横向和纵向显示,添加动画效果等。
CardView实现卡片化效果。
下拉加载使用SwipeRefreshLayout,是官方的下拉刷新控件,简洁美观的风格使其广泛应用在项目中。美中不足的是SwipeRefreshLayout缺少上拉加载的效果,今天结合RecyclerView实现一个支持下拉刷新与上拉加载的SwipeRefreshLayout。
案例包含了:RecyclerView基本使用,RecyclerView上拉刷新下拉加载,RecyclerView多Item布局,CardView基本使用和CardView上拉刷新下拉加载。如图:(注:第三个案例线显示格式在模拟器上有问题,手机则没问题的,手机测试效果更佳)

 
布局:
 
Html代码  <span style="font-size: 12px;"><android.support.v7.widget.RecyclerView      android:id="@+id/my_recycler_view"      android:scrollbars="vertical"      android:layout_width="match_parent"      android:layout_height="match_parent"/></span>  <android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
 Activity:
 
 
Java代码  <span style="font-size: 14px;">public class RecyclerViewActivity extends Activity {        private RecyclerView recyclerView;      private List<String> mDatas;      private RecyclerAdapter1 adapter;      @SuppressLint("InlinedApi")      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.demo1);          initData();          initView();      }      private void initView()      {          recyclerView=(RecyclerView) findViewById(R.id.demo1_recycler);          // 设置布局管理LayoutManager          LinearLayoutManager manager=new LinearLayoutManager(this);          //设置水平或者垂直          // manager.setOrientation(LinearLayoutManager.HORIZONTAL);          recyclerView.setLayoutManager(manager);          // (可选)如果可以确定每个item的高度是固定的,设置这个选项可以提高性能          recyclerView.setHasFixedSize(true);          adapter=new RecyclerAdapter1(this,mDatas);          recyclerView.setAdapter(adapter);          adapter.setOnItemClickListener(new IOnClickListenter() {              @Override              public void onItemClick(View view, int position) {                  Toast.makeText(getApplicationContext(),position+"---"+mDatas.get(position),Toast.LENGTH_LONG).show();              }          });        }      private void initData() {          mDatas = new ArrayList<String>();          for (int i = 0; i <= 50; i++) {              mDatas.add("item---" +i);          }      }    }</span>  public class RecyclerViewActivity extends Activity {

    private RecyclerView recyclerView;
    private List<String> mDatas;
    private RecyclerAdapter1 adapter;
    @SuppressLint("InlinedApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo1);
        initData();
        initView();
    }
    private void initView()
    {
        recyclerView=(RecyclerView) findViewById(R.id.demo1_recycler);
        // 设置布局管理LayoutManager
        LinearLayoutManager manager=new LinearLayoutManager(this);
        //设置水平或者垂直
        // manager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(manager);
        // (可选)如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
        recyclerView.setHasFixedSize(true);
        adapter=new RecyclerAdapter1(this,mDatas);
        recyclerView.setAdapter(adapter);
        adapter.setOnItemClickListener(new IOnClickListenter() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(getApplicationContext(),position+"---"+mDatas.get(position),Toast.LENGTH_LONG).show();
            }
        });

    }
    private void initData() {
        mDatas = new ArrayList<String>();
        for (int i = 0; i <= 50; i++) {
            mDatas.add("item---" +i);
        }
    }

}

 
上拉刷新下拉加载布局
 
Java代码  <android.support.v4.widget.SwipeRefreshLayout          android:id="@+id/swipeRefreshLayout"          android:layout_width="match_parent"          android:layout_height="match_parent">            <android.support.v7.widget.RecyclerView              android:id="@+id/recyclerView"              android:layout_width="match_parent"              android:layout_height="match_parent">            </android.support.v7.widget.RecyclerView>      </android.support.v4.widget.SwipeRefreshLayout>  <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </android.support.v7.widget.RecyclerView>


</android.support.v4.widget.SwipeRefreshLayout>
 上拉刷新下拉加载Activity
 
 
Java代码  public class RecyclerViewPullActivity extends Activity {        private SwipeRefreshLayout swipeRefreshLayout;      private MyRefreshRecyclerView recyclerView;      public static  List<String> list=new ArrayList<String>();      private RecyclerAdapter2 adapter;      private Handler mHandler = new Handler();        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.demo2);          initView();      }      private void initView(){          swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout);          recyclerView = (MyRefreshRecyclerView) findViewById(R.id.recycler);          adapter=new RecyclerAdapter2();          recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));          swipeRefreshLayout.setColorSchemeResources(R.color.blue,R.color.green);          swipeRefreshLayout.post(new Runnable() {              @Override              public void run() {                  swipeRefreshLayout.setRefreshing(true);              }          });          mHandler.postDelayed(new Runnable() {              @Override              public void run() {                  getData();                  recyclerView.setAdapter(adapter);                  adapter.notifyDataSetChanged();                  swipeRefreshLayout.setRefreshing(false);              }          },1500);          swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {              @Override              public void onRefresh() {                  mHandler.postDelayed(new Runnable() {                      @Override                      public void run() {                          getData();                          recyclerView.setAdapter(adapter);                          adapter.notifyDataSetChanged();                          swipeRefreshLayout.setRefreshing(false);                      }                  }, 1500);              }          });          recyclerView.setMyRefreshRecyclerViewListener(new MyRefreshRecyclerView.MyRefreshRecyclerViewListener() {              @Override              public void onLoadMore() {                  mHandler.postDelayed(new Runnable() {                      @Override                      public void run() {                          if (list.size() > 14) {                              recyclerView.setLoadMore(true);                          } else {                              int randomInt = new Random().nextInt(100);                              list.add("上拉加载添加数字:" + randomInt);                              adapter.notifyDataSetChanged();                              recyclerView.setLoadMore(false);                          }                        }                  }, 1000);              }          });      }        private void getData() {          list.clear();          Random random = new Random();          while (list.size() < 12) {              int randomInt = random.nextInt(100);              list.add(String.valueOf(randomInt));          }      }  }  public class RecyclerViewPullActivity extends Activity {

    private SwipeRefreshLayout swipeRefreshLayout;
    private MyRefreshRecyclerView recyclerView;
    public static  List<String> list=new ArrayList<String>();
    private RecyclerAdapter2 adapter;
    private Handler mHandler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo2);
        initView();
    }
    private void initView(){
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout);
        recyclerView = (MyRefreshRecyclerView) findViewById(R.id.recycler);
        adapter=new RecyclerAdapter2();
        recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        swipeRefreshLayout.setColorSchemeResources(R.color.blue,R.color.green);
        swipeRefreshLayout.post(new Runnable() {
            @Override
            public void run() {
                swipeRefreshLayout.setRefreshing(true);
            }
        });
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                getData();
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                swipeRefreshLayout.setRefreshing(false);
            }
        },1500);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        getData();
                        recyclerView.setAdapter(adapter);
                        adapter.notifyDataSetChanged();
                        swipeRefreshLayout.setRefreshing(false);
                    }
                }, 1500);
            }
        });
        recyclerView.setMyRefreshRecyclerViewListener(new MyRefreshRecyclerView.MyRefreshRecyclerViewListener() {
            @Override
            public void onLoadMore() {
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (list.size() > 14) {
                            recyclerView.setLoadMore(true);
                        } else {
                            int randomInt = new Random().nextInt(100);
                            list.add("上拉加载添加数字:" + randomInt);
                            adapter.notifyDataSetChanged();
                            recyclerView.setLoadMore(false);
                        }

                    }
                }, 1000);
            }
        });
    }

    private void getData() {
        list.clear();
        Random random = new Random();
        while (list.size() < 12) {
            int randomInt = random.nextInt(100);
            list.add(String.valueOf(randomInt));
        }
    }
}
 
AS添加依赖库:
Java代码  compile 'com.android.support:recyclerview-v7:23.2.1'  compile 'com.android.support:cardview-v7:23.2.1'   compile 'com.android.support:recyclerview-v7:23.2.1'
 compile 'com.android.support:cardview-v7:23.2.1'

 

 
 
 
 
     

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程