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);
关于更多这些属性的介绍,可以参考
想要使用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
有四个基本方法可供设置
-
setOnRefreshListener(OnRefreshListener listener)
设置下拉监听,当用户下拉的时候会去执行回调 -
setColorSchemeColors(int... colors)
设置 进度条的颜色变化,最多可以设置4种颜色 -
setProgressViewOffset(boolean scale, int start, int end)
调整进度条距离屏幕顶部的距离 -
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);
}
网友评论