Android Recyclerview的Item里的动画 fillAfter(dwg trueview下载) 失效问

万能的RecyclerViewAdapter,支持上拉加载、添加HeadView_美文阅读,精品文摘网
当前位置: &>&&>& >
万能的RecyclerViewAdapter,支持上拉加载、添加HeadView
最近的项目,使用RecyclerView比较多,导致需要写大量的Adapter和ViewHolder。不想偷懒的程序员不是好程序员。于是,查了一些资料,对RecyclerView的Adapter进行了一些封装。使用的时候减少了大量的工作。
先来点效果图
封装后的Adapter使用:
class DragSwipeAdapter extends BaseAdapter&String& {
public DragSwipeAdapter(Context mContext, List&String& mDatas, int mLayoutId) {
super(mContext, mDatas, mLayoutId);
protected void convert(Context mContext, BaseViewHolder holder, String s) {
holder.setText(R.id.tv,s);
只要传入数据源和item布局即可,是不是超级简单。
下面看看怎么实现的吧。
通用ViewHolder
paage org.raphets.demorecyclerview.
import android.annotation.SuppressL
import android.graphics.B
import android.graphics.drawable.D
import android.os.B
import android.support.v7.widget.RecyclerV
import android.text.nnableStringB
import android.util.rseA
import android.view.V
import android.view.animation.AlphaA
import android.widget.C
import android.widget.ImageV
import android.widget.TextV
public class BaseViewHolder extends RecyclerView.ViewHolder {
SparseArray&View& mV
View mItemV
public BaseViewHolder(View itemView) {
super(itemView);
mItemView = itemV
mViews = new SparseArray&&();
public &T extends View& T getView(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = mItemView.findViewById(viewId);
mViews.put(viewId, view);
return (T)
public BaseViewHolder setText(int viewId, int resId) {
TextView textView = getView(viewId);
textView.setText(resId);
public BaseViewHolder setText(int viewId, String text) {
TextView textView = getView(viewId);
textView.setText(text);
public BaseViewHolder setText(int viewId, SpannableStringBuilder text) {
TextView textView = getView(viewId);
textView.setText(text);
public BaseViewHolder setImageResource(int viewId, int resId) {
ImageView view = getView(viewId);
view.setImageResource(resId);
public BaseViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
ImageView view = getView(viewId);
view.setImageBitmap(bitmap);
public BaseViewHolder setImageDrawable(int viewId, Drawable drawable) {
ImageView view = getView(viewId);
view.setImageDrawable(drawable);
public BaseViewHolder setBackgroundColor(int viewId, int color) {
View view = getView(viewId);
view.setBackgroundColor(color);
public BaseViewHolder setBackgroundResource(int viewId, int backgroundRes) {
View view = getView(viewId);
view.setBackgroundResource(backgroundRes);
public BaseViewHolder setTextColor(int viewId, int textColor) {
TextView view = getView(viewId);
view.setTextColor(textColor);
@SuppressLint("NewApi")
public BaseViewHolder setAlpha(int viewId, float value) {
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.HONEYCOMB) {
getView(viewId).setAlpha(value);
// Pre-honeycomb hack to set Alpha value
AlphaAnimation alpha = new AlphaAnimation(value, value);
alpha.setDuration(0);
alpha.setFillAfter(true);
getView(viewId).startAnimation(alpha);
public BaseViewHolder setVisible(int viewId, boolean visible) {
View view = getView(viewId);
view.setVisibility(visible ? View.VISIBLE : View.GONE);
public BaseViewHolder setTag(int viewId, Object tag) {
View view = getView(viewId);
view.setTag(tag);
public BaseViewHolder setTag(int viewId, int key, Object tag) {
View view = getView(viewId);
view.setTag(key, tag);
public BaseViewHolder setChecked(int viewId, boolean checked) {
Checkable view = (Checkable) getView(viewId);
view.setChecked(checked);
* 关于事件监听
public BaseViewHolder setOnClickListener(int viewId, View.OnClickListener listener) {
View view = getView(viewId);
view.setOnClickListener(listener);
public BaseViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) {
View view = getView(viewId);
view.setOnTouchListener(listener);
public BaseViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) {
View view = getView(viewId);
view.setOnLongClickListener(listener);
这里对TextView、ImageView等常用控件的一些常用方法进行了封装。有了这个通用ViewHolder,再多的Adapter也只需要这一个ViewHolder,不用每写一个Adapter就要写一个ViewHolder。
通用Adapter
package org.raphets.demorecyclerview.
import android.content.C
import android.support.v7.util.DiffU
import android.support.v7.widget.RecyclerV
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import java.util.L
* Created by RaphetS on .
* 普通的万能Adapter
* 支持onItemClick
* 支持onLongItemClick
public abstract class BaseAdapter&T& extends RecyclerView.Adapter&BaseViewHolder& {
private Context mC
private List&T& mD
private int mLayoutId;
private OnItemClickListener mItemClickL
private onLongItemClickListener mLongItemClickL
public BaseAdapter(Context mContext, List&T& mDatas, int mLayoutId) {
this.mContext = mC
this.mDatas = mD
this.mLayoutId = mLayoutId;
public void updateData(List&T& data) {
mDatas.clear();
mDatas.addAll(data);
notifyDataSetChanged();
public void addAll(List&T& data) {
mDatas.addAll(data);
notifyDataSetChanged();
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(mLayoutId, parent, false);
BaseViewHolder holder = new BaseViewHolder(view);
public int getItemCount() {
return mDatas.size();
public void onBindViewHolder(BaseViewHolder holder, final int position) {
convert(mContext, holder, mDatas.get(position));
if (mItemClickListener != null) {
holder.mItemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mItemClickListener.onItemClick(v, position);
if (mLongItemClickListener != null) {
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
mLongItemClickListener.onLongItemClick(v, position);
protected abstract void convert(Context mContext, BaseViewHolder holder, T t);
public interface OnItemClickListener {
void onItemClick(View view, int position);
public interface onLongItemClickListener {
void onLongItemClick(View view, int postion);
public void setOnItemClickListener(OnItemClickListener listener) {
this.mItemClickListener =
public void setonLongItemClickListener(onLongItemClickListener listener) {
this.mLongItemClickListener =
这里对RecyclerViewAdapter通用的地方封装了一下,然后封装了一下onItemClick和onLongItemClick事件。
首先,写一个Adapter继承通用Adapter
class DragSwipeAdapter extends BaseAdapter&String& {
public DragSwipeAdapter(Context mContext, List&String& mDatas, int mLayoutId) {
super(mContext, mDatas, mLayoutId);
protected void convert(Context mContext, BaseViewHolder holder, String s) {
holder.setText(R.id.tv,s)
.setTextColor(R.id.tv, Color.RED)
.setImageResource(R.id.imageView,R.mipmap.ic_launcher);
ImageView imageView=holder.getView(R.id.imageView);
imageView.setImageResource(R.mipmap.ic_launcher);
代码比起原生的是不是少很多?
然后在Activity中使用即可。只要传入Context,数据源,item布局即可。
mAdapter = new DragSwipeAdapter(this, mData, R.layout.item);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter);
是不是少了大量的工作。
但是貌似封装的还不够,我们的RecyclerView经常需要使用的功能还有下拉刷新,上拉加载,加个headview等等。下拉刷新好说,直接使用v4包里的SwipeRefreshLayout即可,上拉加载和HeadView怎么办呢?
下面我对上拉加载和HeadView也进行了一下封装。
(目前只支持LinearLayoutManager布局的RecyclerView)
首先ViewHoder不变,依然是上面的ViewHolder。
然后写了一个底部加载中的一个item布局。
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:gravity="center"
android:padding="20dp"
android:layout_height="wrap_content"&
&ProgressBar
style="@android:style/Widget.ProgressBar.Small"
android:id="@+id/pb"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /&
android:layout_marginLeft="10dp"
android:text="正在加载..."
android:layout_width="wrap_content"
android:layout_height="wrap_content" /&
&/LinearLayout&
下面是封装的Adapter
package org.raphets.demorecyclerview.
import android.content.C
import android.support.v7.widget.LinearLayoutM
import android.support.v7.widget.RecyclerV
import android.view.LayoutI
import android.view.V
import android.view.ViewG
import org.raphets.demorecyclerview.R;
import java.util.L
* Created by RaphetS on .
* 支持上拉加载
* 支持添加HeadView
* 底部有进度条
public abstract class BaseLoadMoreHeaderAdapter&T& extends RecyclerView.Adapter {
private Context mC
private boolean isLoading=
private OnLoadMoreListener mOnLoadMoreL
private OnItemClickListener mItemClickL
private onLongItemClickListener mLongItemClickL
private List&T& mD
private int mLayoutId;
private View mHeadV
private final static int TYPE_HEADVIEW=100;
private final static int TYPE_ITEM=101;
private final static int TYPE_PROGRESS=102;
public BaseLoadMoreHeaderAdapter(Context mContext, RecyclerView recyclerView, List&T& mDatas, int mLayoutId) {
this.mContext = mC
this.mDatas = mD
this.mLayoutId = mLayoutId;
init(recyclerView);
private void init(RecyclerView recyclerView) {
//mRecyclerView添加滑动事件监听
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int totalItemCount = linearLayoutManager.getItemCount();
int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
if (!isLoading dy&0lastVisibleItemPosition&=totalItemCount-1) {
//此时是刷新状态
if (mOnLoadMoreListener != null) {
mOnLoadMoreListener.onLoadMore();
isLoading =
public void updateData(List&T& data) {
mDatas.clear();
mDatas.addAll(data);
notifyDataSetChanged();
public void addAll(List&T& data) {
mDatas.addAll(data);
notifyDataSetChanged();
public void addHeadView(View headView){
mHeadView=headV
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType==TYPE_ITEM){
View itemView= LayoutInflater.from(mContext).inflate(mLayoutId,parent,false);
BaseViewHolder baseViewHolder=new BaseViewHolder(itemView);
return baseViewH
}else if (viewType==TYPE_HEADVIEW){
HeadViewHolder headViewHolder=new HeadViewHolder(mHeadView);
return headViewH
View progressView=LayoutInflater.from(mContext).inflate(R.layout.progress_item,parent,false);
ProgressViewHolder progressViewHolder= new ProgressViewHolder(progressView);
return progressViewH
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if (holder instanceof BaseViewHolder){
convert(mContext, holder, mDatas.get(position));
((BaseViewHolder) holder).mItemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mItemClickListener.onItemClick(v,position-1);
((BaseViewHolder) holder).mItemView.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
mLongItemClickListener.onLongItemClick(v,position-1);
public int getItemViewType(int position) {
if (mHeadView!=null){
if (position==getItemCount()-1){
return TYPE_PROGRESS;
}else if (position==0){
return TYPE_HEADVIEW;
return TYPE_ITEM;
if (position==getItemCount()-1){
return TYPE_PROGRESS;
return TYPE_ITEM;
public abstract void convert(Context mContext, RecyclerView.ViewHolder holder, T t);
public int getItemCount() {
return mDatas.size()+1;
public void setLoading(boolean b){
isLoading=b;
public interface OnItemClickListener {
void onItemClick(View view, int position);
public interface onLongItemClickListener {
void onLongItemClick(View view, int postion);
public void setOnItemClickListener(OnItemClickListener listener) {
this.mItemClickListener =
public void setonLongItemClickListener(onLongItemClickListener listener) {
this.mLongItemClickListener =
public void setOnLoadMoreListener(OnLoadMoreListener listener){
this.mOnLoadMoreListener=
public interface OnLoadMoreListener{
void onLoadMore();
public class ProgressViewHolder extends RecyclerView.ViewHolder{
public ProgressViewHolder(View itemView) {
super(itemView);
public class HeadViewHolder extends RecyclerView.ViewHolder{
public HeadViewHolder(View itemView) {
super(itemView);
上拉加载和HeadView都是通过ItemViewType实现的,通过不同的position得到不同的ItemViewType,然后在onCreateViewHolder()的时候通过不同的ItemViewType加载不同的布局,创建不同的ViewHolder。
1、首先写一个Adapter继承BaseLoadMoreHeaderAdapter,注意要判断holder的类型
class MyAdapter extends BaseLoadMoreHeaderAdapter&String& {
public MyAdapter(Context mContext, RecyclerView recyclerView, List&String& mDatas, int mLayoutId) {
super(mContext, recyclerView, mDatas, mLayoutId);
public void convert(Context mContext, RecyclerView.ViewHolder holder, String s) {
if (holder instanceof BaseViewHolder){
((BaseViewHolder) holder).setText(R.id.tv,s);
2、在Activity中设置Adapter
LinearLayoutManager layoutManager=new LinearLayoutManager(this);
mAdapter=new MyAdapter(this,mRecyclerView,mDatas,R.layout.item);
mRecyclerView.setLayoutManager(layoutManager);
View headView= LayoutInflater.from(this).inflate(R.layout.headview,mRecyclerView,false);
mAdapter.addHeadView(headView);
mRecyclerView.setAdapter(mAdapter);
mAdapter.setOnLoadMoreListener(new BaseLoadMoreHeaderAdapter.OnLoadMoreListener() {
public void onLoadMore() {
loadMore();
mAdapter.setOnItemClickListener(new BaseLoadMoreHeaderAdapter.OnItemClickListener() {
public void onItemClick(View view, int position) {
Toast.makeText(getApplicationContext(),position+"",Toast.LENGTH_SHORT).show();
注意这里,需要先给RecyclerView设置LayoutManager,在加载HeadView(View headView= LayoutInflater.from(this).inflate(R.layout.headview,mRecyclerView,false);)否则会报错。
/RaphetS/RecyclerView
延伸阅读:
(责任编辑:美朵)
每日重点推荐
夏医生是自己多年老同事的儿子,国外学成归来做事业,老同事担心儿子诊所刚开,门厅罗雀伤了自尊,便偷偷塞钱给李梅,求她装病去“捧场”。
04-05 12-15 12-15
一周热点文章
在线阅读专题&nbsp&#8250&nbsp&nbsp&#8250&nbsp
为RecyclerView添加item的点击事件
RecyclerView侧重的是布局的灵活性,虽说可以替代ListView但是连基本的点击事件都没有,这篇文章就来详细讲解如何为RecyclerView的item添加点击事件,顺便复习一下观察者模式。其实在 & 中已经提到如何实现,但是里面有很多不规范的地方,而且没有完整的代码。最终目的模拟ListView的setOnItemClickListener()方法,调用者只须调用类似于setOnItemClickListener的东西就能获得被点击item的相关数据。原理为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。而“为RecyclerView的每个子item设置setOnClickListener”在Adapter中设置。其实直接在onClick中也能完全处理item的点击事件,但是这样会破坏代码的逻辑。步骤adapter中自定义一个继承自RecyclerView.Adapter的MyAdapter。1.在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener:&&&&//define&interface
&&&&public&static&interface&OnItemClickListener&{
&&&&&&&&void&onItemClick(View&view&,&int&position);
&&&&}声明一个这个接口的变量&&&&private&OnItemClickListener&mOnItemClickListener&=&在onCreateViewHolder()中为每个item添加点击事件&&&&@Override
&&&&public&ViewHolder&onCreateViewHolder(ViewGroup&viewGroup,&&int&viewType)&{
&&&&&&&&View&view&=&LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,&viewGroup,&false);
&&&&&&&&ViewHolder&vh&=&new&ViewHolder(view);
&&&&&&&&//将创建的View注册点击事件
&&&&&&&&view.setOnClickListener(this);
&&&&&&&&return&
&&&&}将点击事件转移给外面的调用者:&&&&@Override
&&&&public&void&onClick(View&v)&{
&&&&&&&&if&(mOnItemClickListener&!=&null)&{
&&&&&&&&&&&&//注意这里使用getTag方法获取position
&&&&&&&&&&&&mOnItemClickListener.onItemClick(v,(int)v.getTag());
&&&&}注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item的position&&&&@Override
&&&&public&void&onBindViewHolder(ViewHolder&viewHolder,&&int&position)&{
&&&&&&&&viewHolder.mTextView.setText(datas[position]);
&&&&&&&&//将position保存在itemView的Tag中,以便点击时进行获取
&&&&&&&&viewHolder.itemView.setTag(position);
&&&&}最后暴露给外面的调用者,定义一个设置Listener的方法():&&&&public&void&setOnItemClickListener(OnItemClickListener&listener)&{
&&&&&&&&this.mOnItemClickListener&=&
&&&&}以上所有步骤都发生在自定义的adapter中,典型的观察者模式,有点绕的地方在于,这里涉及到两个观察者模式的使用,view的setOnClickListener本来就是观察者模式,我们将这个观察者模式的事件监听传递给了我们自己的观察者模式。在Activity中使用&&&&&&&&mRecyclerView&=&(RecyclerView)findViewById(R.id.my_recycler_view);
&&&&&&&&//创建默认的线性LayoutManager
&&&&&&&&mLayoutManager&=&new&LinearLayoutManager(this);
&&&&&&&&mRecyclerView.setLayoutManager(mLayoutManager);
&&&&&&&&//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
&&&&&&&&mRecyclerView.setHasFixedSize(true);
&&&&&&&&//创建并设置Adapter
&&&&&&&&mAdapter&=&new&MyAdapter(data);
&&&&&&&&mRecyclerView.setAdapter(mAdapter);
&&&&&&&&mAdapter.setOnItemClickListener(new&OnItemClickListener(){
&&&&&&&&&&&&@Override&&&&
&&&&&&&&&&&&public&void&onItemClick(View&view&,&int&position){
&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this,&data[position],&600).show();
&&&&&&&&&&&&}
&&&&&&&&});完整代码MyAdapter.javapackage&com.example.
import&android.support.v7.widget.RecyclerV
import&android.util.L
import&android.view.LayoutI
import&android.view.V
import&android.view.ViewG
import&android.widget.TextV
public&class&MyAdapter&extends&RecyclerView.Adapter&MyAdapter.ViewHolder&&implements&View.OnClickListener{
&&&&private&&String[]&&
&&&&public&MyAdapter(String[]&datas)&{
&&&&&&&&this.datas&=&
&&&&private&OnItemClickListener&mOnItemClickListener&=&
&&&&//define&interface
&&&&public&static&interface&OnItemClickListener&{
&&&&&&&&void&onItemClick(View&view&,&int&position);
&&&&@Override
&&&&public&ViewHolder&onCreateViewHolder(ViewGroup&viewGroup,&&int&viewType)&{
&&&&&&&&View&view&=&LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,&viewGroup,&false);
&&&&&&&&ViewHolder&vh&=&new&ViewHolder(view);
&&&&&&&&//将创建的View注册点击事件
&&&&&&&&view.setOnClickListener(this);
&&&&&&&&return&
&&&&@Override
&&&&public&void&onBindViewHolder(ViewHolder&viewHolder,&&int&position)&{
&&&&&&&&viewHolder.mTextView.setText(datas[position]);
&&&&&&&&//将position保存在itemView的Tag中,以便点击时进行获取
&&&&&&&&viewHolder.itemView.setTag(position);
&&&&@Override
&&&&public&void&onClick(View&v)&{
&&&&&&&&if&(mOnItemClickListener&!=&null)&{
&&&&&&&&&&&&//注意这里使用getTag方法获取position
&&&&&&&&&&&&mOnItemClickListener.onItemClick(v,(int)v.getTag());
&&&&public&void&setOnItemClickListener(OnItemClickListener&listener)&{
&&&&&&&&this.mOnItemClickListener&=&
&&&&//获取数据的数量
&&&&@Override
&&&&public&int&getItemCount()&{
&&&&&&&&return&datas.
&&&&//自定义的ViewHolder,持有每个Item的的所有界面元素
&&&&public&static&class&ViewHolder&extends&RecyclerView.ViewHolder&{
&&&&&&&&public&TextView&mTextV
&&&&&&&&public&ViewHolder(View&view){
&&&&&&&&super(view);
&&&&&&&&&&&&mTextView&=&(TextView)&view.findViewById(R.id.text);
}item.xml&RelativeLayout&xmlns:android=&/apk/res/android&
&&&&xmlns:tools=&/tools&
&&&&android:layout_width=&match_parent&
&&&&android:layout_height=&50dip&
&&&&&TextView
&&&&&&&&android:id=&@+id/text&
&&&&&&&&android:layout_width=&wrap_content&
&&&&&&&&android:layout_height=&wrap_content&
&&&&&&&&/&
&/RelativeLayout&MainActivity.javapackage&com.example.
import&com.example.recyclerviewdemo.MyAdapter.OnItemClickL
import&android.support.v7.app.ActionBarA
import&android.support.v7.widget.LinearLayoutM
import&android.support.v7.widget.RecyclerV
import&android.os.B
import&android.view.M
import&android.view.MenuI
import&android.view.V
import&android.widget.T
public&class&MainActivity&extends&ActionBarActivity&{
&&&&private&RecyclerView&mRecyclerV
&&&&private&LinearLayoutManager&mLayoutM
&&&&private&MyAdapter&mA
&&&&private&String[]&data=&new&String[]&{&aa&,&bb&,&&aa&,&bb&,&&aa&,&bb&,&&aa&,&bb&,&&aa&,&bb&,&aa&,&bb&,&&aa&,&bb&,&&aa&,&bb&,&&aa&,&bb&,&&aa&,&bb&&&};
&&&&@Override
&&&&protected&void&onCreate(Bundle&savedInstanceState)&{
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.activity_main);
&&&&&&&&mRecyclerView&=&(RecyclerView)findViewById(R.id.my_recycler_view);
&&&&&&&&//创建默认的线性LayoutManager
&&&&&&&&mLayoutManager&=&new&LinearLayoutManager(this);
&&&&&&&&mRecyclerView.setLayoutManager(mLayoutManager);
&&&&&&&&//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
&&&&&&&&mRecyclerView.setHasFixedSize(true);
&&&&&&&&//创建并设置Adapter
&&&&&&&&mAdapter&=&new&MyAdapter(data);
&&&&&&&&mRecyclerView.setAdapter(mAdapter);
&&&&&&&&mAdapter.setOnItemClickListener(new&OnItemClickListener(){
&&&&&&&&&&&&@Override&&&&
&&&&&&&&&&&&public&void&onItemClick(View&view&,&int&position){
&&&&&&&&&&&&&&&&Toast.makeText(MainActivity.this,&data[position],&600).show();
&&&&&&&&&&&&}
&&&&&&&&});
&&&&@Override
&&&&public&boolean&onCreateOptionsMenu(Menu&menu)&{
&&&&&&&&//&Inflate&the&&this&adds&items&to&the&action&bar&if&it&is&present.
&&&&&&&&getMenuInflater().inflate(R.menu.main,&menu);
&&&&&&&&return&
&&&&@Override
&&&&public&boolean&onOptionsItemSelected(MenuItem&item)&{
&&&&&&&&//&Handle&action&bar&item&clicks&here.&The&action&bar&will
&&&&&&&&//&automatically&handle&clicks&on&the&Home/Up&button,&so&long
&&&&&&&&//&as&you&specify&a&parent&activity&in&AndroidManifest.xml.
&&&&&&&&int&id&=&item.getItemId();
&&&&&&&&if&(id&==&R.id.action_settings)&{
&&&&&&&&&&&&return&
&&&&&&&&return&super.onOptionsItemSelected(item);
}activity_main.xml&RelativeLayout&xmlns:android=&/apk/res/android&
&&&&xmlns:tools=&/tools&
&&&&android:layout_width=&match_parent&
&&&&android:layout_height=&match_parent&
&&&&tools:context=&.MainActivity&&
&&&&&android.support.v7.widget.RecyclerView
&&&&&&&&android:id=&@+id/my_recycler_view&
&&&&&&&&android:layout_width=&match_parent&
&&&&&&&&android:layout_height=&match_parent&
&&&&&&&&android:scrollbars=&vertical&/&
&/RelativeLayout&总结在ListView中我们是调用ListView的setOnItemClickListener:&&&&&&&&mListView.setOnItemClickListener(new&OnItemClickListener()&{
&&&&&&&&&&&&public&void&onItemClick(AdapterView&?&&parent,&View&v,&int&position,&long&id)&{
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&...&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&});而在我们这里是调用mAdapter的setOnItemClickListener。
上一篇: Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP可以让您的应用运行更快、更节省流量。而OkHttp库
下一篇: 英文原文: Probably be the best way (?) to save/restore Android Fragment’s state so far 关键点:Fragment的Arguments。 经过这几年使用Fragment之后,我想说,Fragment的确是一种充满智慧的设计,但是使用Fragment时有太多需要我们逐一解决的问题,尤}

我要回帖

更多关于 dwg trueview中文版 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信