[安卓] RecyclerView Android中
大家好, 很久很久没有博客, 在这篇文章中,我将介绍,教你使用Android RecyclerView的基础知识.
什么是RecyclerView
RecyclerView是Android的一个新的像查看 ListView控件 但很强大.
RecyclerView使我们能够装载更多数据的ListView, 爪顺畅, 更好的效果,并支持在所述列表中的元素的多样布局.
使用RecyclerView在Eclipse
不知道你的机器使用的是Android的可靠工作室尚未顺利, “妻子” 她的话,就可以启用时的Android工作室点燃. 所以我用Eclipse是足够. 然而,大多数的导游现在准则,你应该做你的Android Studio会将这对你有什么 “关头” 喜欢她.
你去所在的目录SDK和心脏到目录: SDK 额外的Android m2repository COM 机器人 SUPPORT recyclerview-V7 22.1.1 (目录 22.1.1 SDK使用他的版本, 你再执行用户到该目录) 你会看到该文件 recyclerview-v7-22.1.1.aar, 它复制到另一个位置, 更改公司名称 recyclerview-v7-22.1.1.zip (如果使用的是Windows,别忘了露出尾巴了) 并提取你会发现 1 文件 classes.jar, 这是我们所需要的库文件. 你可以将其重命名为朗朗上口, 自己改 recyclerview.jar. 你将其复制到该文件夹 LIB 该项目已完成.
使用RecyclerView Android中工作室
如果采用Android,演播室说地球站, 我并不确认这一点,你可以添加以下到文件摇篮:
compile 'com.android.support:recyclerview-v7:21.0.+'
通过RecyclerView列表代码生成
首先创建一个项目像往常一样, 完成后,我们开始码…
XML接口
首先滞后接口 1 列表中的元素包括文本和 1 删除按钮. 文件 item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="horizontal" android:paddingLeft="8dp" android:paddingRight="8dp" > <TextView android:id="@+id/tv_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="8dp" android:layout_weight="1" /> <ImageButton android:id="@+id/btn_delete" android:layout_width="32dp" android:layout_height="32dp" android:src="@drawable/ic_delete" /> </LinearLayout>
在上面的代码
然后创建一个由活动接口 1 EditText上输入文字, 1 按钮添加, 和一个显示列表RecyclerView. 文件 activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/edit_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="name" /> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add" /> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" /> </LinearLayout>
代码的Java手柄
首先,我们创建一个包含数据的数据类 1 元素, 在这个例子中命名自己很孤独. 文件 Data.java
package cachhoc.net.samplerecyclerview; public class Data { private String name; public Data(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
跟随, 就像当 自定义的ListView, 我们需要创建 1 单独的适配器. 在这里,太, 我们创建 1 适配器Recyclerview. 文件 CustomRecyclerAdapter.java
package cachhoc.net.samplerecyclerview; import java.util.ArrayList; import java.util.List; import cachhoc.net.samplerecyclerview.CustomRecyclerAdapter.RecyclerViewHolder; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.TextView; public class CustomRecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder> { private List<Data> listData = new ArrayList<Data>(); public CustomRecyclerAdapter(List<Data> listData) { this.listData = listData; } public void updateList(List<Data> data) { listData = data; notifyDataSetChanged(); } @Override public int getItemCount() { return listData.size(); } @Override public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) { LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); View itemView = inflater.inflate(R.layout.item, viewGroup, false); return new RecyclerViewHolder(itemView); } @Override public void onBindViewHolder(RecyclerViewHolder viewHolder, int position) { viewHolder.tvName.setText(listData.get(position).getName()); } public void addItem(int position, Data data) { listData.add(position, data); notifyItemInserted(position); } public void removeItem(int position) { listData.remove(position); notifyItemRemoved(position); } /** * ViewHolder for item view of list * */ public class RecyclerViewHolder extends RecyclerView.ViewHolder implements OnClickListener { public TextView tvName; public ImageButton btnDelete; public RecyclerViewHolder(View itemView) { super(itemView); tvName = (TextView) itemView.findViewById(R.id.tv_name); btnDelete = (ImageButton) itemView.findViewById(R.id.btn_delete); // set listener for button delete btnDelete.setOnClickListener(this); } // remove item when click button delete @Override public void onClick(View v) { removeItem(getAdapterPosition()); } } }
在你上面的代码稍加留意, 其他的ListView它的.
方法 onCreateViewHolder getView也有类似的功能使用时的ListView, 这是寻求接口 1 元素, 是 item.xml 上面建但当我们回到返回 RecyclerViewHolder.
方法 onBindViewHolder 叫中的元素设置的值.
RecyclerViewHolder 是 1 类包含一个元素的属性 (文本名称VA按钮删除). 在RecyclerViewHolder你也注意到,我们启动事件在这里,而不是删除按钮在捕获事件捕获onCreateViewHolder,因为我们需要知道的位置 (位置) 通过方法 getAdapterPosition 而不是onCreateViewHolder捕获会导致错误.
最后,编写代码MainActivity. 这其中的易睿. 文件 MainActivity.java
package cachhoc.net.samplerecyclerview; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity implements OnClickListener { private RecyclerView recyclerView; private CustomRecyclerAdapter adapter; private RecyclerView.LayoutManager layoutManager; private EditText editName; private List<Data> listData = new ArrayList<Data>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // connect views. editName = (EditText) findViewById(R.id.edit_name); recyclerView = (RecyclerView) findViewById(R.id.recycler); // If the size of views will not change as the data changes. recyclerView.setHasFixedSize(true); // Setting the LayoutManager. layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); // Setting the adapter. adapter = new CustomRecyclerAdapter(listData); recyclerView.setAdapter(adapter); // set listener for button add ((Button) findViewById(R.id.btn_add)).setOnClickListener(this); } // Called when add button is clicked. public void addItem() { // get data. Data dataToAdd = new Data(editName.getText().toString()); // Update adapter. adapter.addItem(listData.size(), dataToAdd); } @Override public void onClick(View v) { addItem(); } }
你可以下载项目 (在实施日食) 样品Recyclerview
您好Nguyenvanquan7826 ,
问问自己调用方法时RemoveItem(getAdapterPosition()) 以上,传递的参数是位置. 测试自己都getAdapterPosition() 和getLayoutPosition() 在同一RecyclerView显示的结果. 所以,你问自己不同的角度 2 方法getAdapterPosition() 和getLayoutPosition() 什么 ?
这是稍微复杂了.
当你有更多的数据和时间来计算加载数据长 (例如,当你的Gmail加载作为) 然后数据适配器正在改变,但该接口不. 在此期间将举行不同 2 这种方法.
你可以点击这里阅读:
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#getAdapterPosition()
谢谢nguyenvanquan7826 !
喜兄弟. 我用
查看viewItem = LayoutInflater.from(背景).膨胀(R.layout.layout_item_news_feed, 亲, 假);
考试是在接口上的空间.
还使用
查看viewItem = LayoutInflater.from(背景).膨胀(R.layout.layout_item_news_feed, 空值);
没关系. 但显然没有纠正.
他回答帮我先生. 谢谢哥哥!