2016/3/27 RecyclerView

RecyclerView 出来已经挺久了,今天下午刚接触一下。

RecyclerView已经逐步取代lsitView,别的不多说,上代码:

我们使用的开发工具是Android Studio。

想要使用RecyclerView,首先我们要在build.gradle中添加:

dependencies {    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])    testCompile ‘junit:junit:4.12‘    compile ‘com.android.support:appcompat-v7:23.2.1‘    compile ‘com.android.support:design:23.2.1‘    /*使用RecyclerView*/    compile ‘com.android.support:recyclerview-v7:23.0.1‘    compile ‘com.google.android.gms:play-services-appindexing:8.1.0‘}

XML中的代码:
  <android.support.v7.widget.RecyclerView      android:id="@+id/recyclerView"      android:layout_width="match_parent"      android:layout_height="wrap_content">

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

JAVA代码:
public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;    private List<String> datas = new ArrayList<>();    private MyAdapter adapter;

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    //找到控件        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);        adapter = new MyAdapter(datas);        recyclerView.setAdapter(adapter);        recyclerView.setLayoutManager(new LinearLayoutManager(this));        //设置分割线        recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));        //GridVIew与listVIew自由切换        // recyclerView.setLayoutManager( new GridLayoutManager(this,4));        //瀑布流        //  recyclerView.setLayoutManager( new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL));

        initDatas();        adapter.setOnClickListener(new MyAdapter.OnTestClickListener() {            @Override            public void OnCcc(View v, int position, String city) {                Toast.makeText(MainActivity.this, city, Toast.LENGTH_SHORT).show();            }        });

    }

    private void initDatas() {

        datas.add("山东");        datas.add("上海");        datas.add("北京");        datas.add("河南");        datas.add("古巴");        datas.add("莱阳");        datas.add("烟台");        datas.add("青岛");        datas.add("济南");        datas.add("菏泽");        datas.add("淄博");        datas.add("莱西");        datas.add("栖霞");        datas.add("桃村");        datas.add("鱼台");        datas.add("青州");        datas.add("台东");        datas.add("高新");        datas.add("长清");        datas.add("即墨");        datas.add("姜疃");        datas.add("穴坊");        datas.add("乔家泊");        datas.add("聊城");        datas.add("菏泽");        datas.add("哈尔滨");        datas.add("齐齐哈尔");        datas.add("美国");        datas.add("中国");        datas.add("伊拉克");    }}
  Adapter:
//继承RecyclerView.Adapter<>,泛型必须是ViewHolderpublic class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private List<String> mDatas;

    private LayoutInflater inflater;

    private OnTestClickListener listener;    public void setOnClickListener(OnTestClickListener listener){

        this.listener = listener;    }

    //创建一个构造方法,把数据源传递进来    public MyAdapter(List<String> datas) {        mDatas = datas;

    }

        //添加数据    public void addData(int position,String city){

        mDatas.add(position,city);        notifyItemInserted(position);    }

    //删除数据    public void deleteData(int position){

        mDatas.remove(position);        notifyItemRemoved(position);

    }

    //创建一个ViewHolder,相当于以前个getView方法;    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        inflater = LayoutInflater.from(parent.getContext());

        View view = inflater.inflate(R.layout.the_item, parent, false);

        return new ViewHolder(view);    }

    //相当于以前在getView方法中绑定数据    @Override    public void onBindViewHolder(ViewHolder holder, int position) {

        //把数据和View进行绑定        holder.textView.setText(mDatas.get(position));

    }

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

    //  ViewHolder必须继承RecyclerView.ViewHolder    class ViewHolder extends RecyclerView.ViewHolder {

        private TextView textView;

        public ViewHolder(View itemView) {            super(itemView);            textView = (TextView) itemView.findViewById(R.id.textView);            itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                if(listener != null){                    listener.OnCcc(view,getLayoutPosition(),mDatas.get(getLayoutPosition()));                }                }            });

        }

    }  //RecyclerView 的监听事件完全交给开发者;    interface  OnTestClickListener{      //自定义我们需要的参数;        void OnCcc(View v, int position ,String city);    }

}

  
 

  

时间: 2024-08-03 23:42:26

2016/3/27 RecyclerView的相关文章

2016/1/27 1, File 创建 删除 改名 换路径 2,输出流 不覆盖 换行输入 3,输入流

1, File  创建  删除  改名  换路径 1 package Stream; 2 3 import java.io.File; 4 5 import java.io.IOException; 6 7 public class OutIn { 8 9 /** 10 * 输入输出 11 */ 12 public static void main(String[] args) { 13 File f1 = new File("d:/book.txt"); // 第一种 实例化文件名称

2016.9.27小程序---数据库练习1

1 -- createbbc, 1, 50 2 DROP TABLE bbc; 3 4 5 CREATE INDEX bbc_region ON bbc(region); 6 7 GO 8 -- tabbbc, 1, 50 9 INSERT INTO bbc VALUES ('Afghanistan','South Asia',652225,26000000,NULL); 10 INSERT INTO bbc VALUES ('Albania','Europe',28728,3200000,66

2016.2.27日(开学)学习总结

复习时间:2016.2.26 复习地点:南书院 复习内容:PHP Web程序设计与Ajax技术 知识点: 1)c/s结构与b/s结构的比较 c/s不易于部署,升级困难,同时对客户端的操作系统也有要求: b/s结构响应速度明显不如c/s结构,每次访问(前进或者后退)都会导致页面的刷新. 2)web应用程序与网站 网站侧重于将数据的展示形式,而web应用程序的真正核心功能是对数据库进行处理(例如b/s的管理信息系统) 3)HTTP通信协议是浏览器与web服务器之间通信的语言  浏览器只能解析HTML

angular2 组件之间通讯-使用服务通讯模式 2016.10.27 基于正式版ng2

工作中用到ng2的组件通讯 奈何官方文档言简意赅 没说明白 自己搞明白后 整理后分享下 rxjs 不懂的看这篇文章 讲很详细 http://www.open-open.com/lib/view/open1462525661610.html 以下是服务代码 1 import { Injectable } from '@angular/core'; 2 import {Subject}from"rxjs/Subject"; 3 @Injectable() 4 export class CS

【2016.5.27】再见,软件工程,你好,软件工程。

今天是5月27号,软件工程课已经结了一个星期了,后天就是软件工程期末考试的日子了,想着这一个学期的走来,从新奇,到抵触,到接受,到理解,其中的酸甜苦辣,只有自己知道. 今天距离考研还有210天,说实话,如果没有考研,大创,还有一些乱七八糟的比赛的话,我会更加投入到软件工程的学习中来,很可惜,也很无奈.就像水奔流到海不回头一样,我们也没有后悔药可以吃,既然选择,就必须承担起他引发的一切后果. 我的兴趣在于嵌入式,作为一个讲究设计,思考的方向,当时我感觉,软件工程的理论实用性不是那么的强,但是现在,

2016.11.27

今天是我第一次开始打算记录自己的计划,现在回头看看,从6月12号毕业到今天也已经度过了169天了,毕业之后一直在尝试投简历,刚开始还是打算在家附近找一份工作,后来觉得家附近并没有很好前景的企业,当时也只是漫无目的的打算找一份过得去的工作先做起来,便开始扩大范围的投简历,就这样在家待了大概三周后,我没有了起初的悠哉,开始焦虑起来,以至于我居然去了所谓的类似P2P公司面试,现在想想确实有些好笑,当时也没太认真,总感觉毕业了还歇在家怎么也说不过去. 两周后. 度过了难熬的时间,我有了第一份工作,是一家

2016.5.27 php测试中敏感度高,怎么调整

在测试PHP代码的过程中,会遇到这样的问题:PHP提示Notice: Undefined variable,遇到这样的问题很纠结,但是很容易解决. 今天晚上,我就遇到了这样的问题,到网上搜索了很多解决方法,整理如下,仅供参考,同时再次感谢网上各位大牛给大家提供的各式各样的方法! PHP默认的配置会报这个错误,虽然有利于发现错误,但同时字现实实践中会出现很多问题. 解决方法如下: 一.修改php.ini配置文件 error_reporting设置:            找到error_repor

2016/4/27 网络编程

OSI:开放系统互联参考模型 是IOS提出为异构系统互联提供了概念性的框架 : 分为七层  应用  表示  会话  传输  网络  数据连接  物理 网络编程  编写能直接或间接的通过网络协议与其他计算机上的某个程序进行通讯 : Telnet协议  23端口        简单邮件传输   25端口     文件传输  21端口    超文本传输  80端口 TCP 可靠的双流向协议 可以发送任意数量的数据 能够确认消息检测消息的的错误 并恢复 UDP 协议 不太可靠 单项传输 数据可能丢失 i

2016/02/27 codes

b2Math.b2Abs = function(a){return a > 0.0 ? a : -a ;};b2Math.b2AbsV = function(a){var b = new b2Vec2(b2Math.b2Abs(a.x),b2Math.b2Abs(a.y));return b};b2Math.b2AbsM=function(A){var B=new b2Mat22(0,b2Math.b2AbsV(A.col1),b2Math.b2AbsV(A.col2));return B;};