有段时间没写博客了,可能写博客的时间都用去把妹了吧。说到把妹,偶尔也会在无意间了解一些把妹的技巧,比如云擒故纵啊什么的。可能这些技巧前期会有一定的作用,可能会让妹子对你产生一定的好感或者依赖性。但是话说回来时间长了,还是得靠真本事来挽留住妹子的心。比如自身的素养,自身的经济实力,自身是不是真心对身边的每一个人,而不是只是使用一些临时学来的小伎俩。只是靠一些套路,不仅时间长了,妹子走了。最真诚的朋友也会慢慢离你而去。我身边其实有这样的例子。所以说谈恋爱、工作、生活,其实都是密不可分的。谈恋爱的时候是个什么样的人,大体可以推断出工作中、生活中是个什么样的人了。所以作为一个IT男,可能在恋爱方面不那么有优势,但是我们可以在努力高效率的工作之后,尽情的享受生活带给我们的乐趣,比如去运动运动,爬爬山,游游泳,旅旅行。真诚的对待身边的人 ,那么就会慢慢变成一个阳光开朗有责任的人。那么妹子自然会被你吸引到。人们不是说最高端的把妹手段不是追求,而是吸引。当然,可能有的人可能会说,说的好轻松,整天加班哪有时间呀。但据我所知啊。我们这个行业加班的情况大体有两种:一种是真的很忙,尤其是项目后期,那么这个时候该干什么干什么吧。好好工作,工作的时候学到了很多东西。很值得的,过完这阵还是可以放松放松的。还有一种就是不知道为什么加班,无谓的那种加班,没什么效率,基本上就是耗时间,那么这种情况下,就要考虑换一换了。人生很短,来不及等待。努力的同时,希望我们能够生活的更精彩。因为青春转眼即逝~~
好了,以上只是最近的一些小感慨,突然有感觉了,就写了下来,每时每刻都在体验中,希望大家工作的业余时间有兴趣可以一起交流下。
言归正传,RecyclerView出来很长时间了。最近才真正的运用上,平时就是懒,思路比较懈怠,可能是从小的一个缺点吧。比较传统,有能用的ListView、GridView就行了。但是真正用到RecyclerView才发现它是如此的强大,如此的方便。所以最近写了较多RecyclerView的例子,以便来更透彻的来学习它。
下面贴出来RecyclerView使用最基础的代码:
package com.hongri.recyclerview.activity;
import android.os.Bundle;
import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.ndk.CrashlyticsNdk;
import com.hongri.recyclerview.R;
import com.hongri.recyclerview.fragment.HomeFragment;
import com.hongri.recyclerview.utils.Logger;
import io.fabric.sdk.android.Fabric;
/**
* @author:zhongyao on 2016/6/30 14:32
* @description:主界面Activity
*/
public class MainActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Logger.d("MainActivity--onCreate()");
//Fabric统计初始化
Fabric.with(this, new Crashlytics(), new CrashlyticsNdk());
setContentView(R.layout.activity_main);
getSupportActionBar().setTitle("红日");
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.container, HomeFragment.getInstance()).commit();
}
}
}
package com.hongri.recyclerview.fragment;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.hongri.recyclerview.R;
import com.hongri.recyclerview.activity.DetailActivity;
import com.hongri.recyclerview.adapter.HomeViewAdapter;
import com.hongri.recyclerview.utils.DataUtil;
import com.hongri.recyclerview.utils.Logger;
import com.hongri.recyclerview.utils.ToastUtil;
import java.util.ArrayList;
/**
* @author:zhongyao on 2016/6/29 15:52
* @description:
*/
public class HomeFragment extends Fragment implements HomeViewAdapter.HomeViewItemClickListener{
private RecyclerView mRecyclerView;
private HomeViewAdapter mAdapter;
private static HomeFragment homeFragment = null;
private ArrayList<String> mData = new ArrayList<>();
/**
* 单例模式--双重检查锁定
* @return
*/
public static HomeFragment getInstance(){
if (homeFragment == null){
synchronized (HomeFragment.class){
if (homeFragment == null){
homeFragment = new HomeFragment();
}
}
}
return homeFragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Logger.d("HomeFragment--oncreate()");
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Logger.d("HomeFragment--onCreateView()");
View view = inflater.inflate(R.layout.fragment_home,container,false);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Logger.d("HomeFragment--onViewCreated()");
init(view);
//获取数据
mData = DataUtil.getHomeData();
}
private void init(View view) {
mRecyclerView = (RecyclerView) view.findViewById(R.id.rv);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Logger.d("HomeFragment--onActivityCreated()");
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
// if (APPUtils.isLandscape(getActivity())){
// mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(),8));
// }else{
// mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(),4));
// }
mAdapter = new HomeViewAdapter(getActivity(),mData);
mAdapter.setItemClickListener(this);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
}
@Override
public void onItemClick(View v,int position) {
ToastUtil.ShowBottomShort(getActivity(),mData.get(position));
Intent intent = new Intent(getActivity(),DetailActivity.class);
intent.putExtra("position",position);
intent.putExtra("title",mData.get(position));
startActivity(intent);
}
@Override
public void onItemLongClick(View view, int position) {
ToastUtil.ShowBottomShort(getActivity(),"longClick:"+mData.get(position));
}
}
最基础的代码,相信都能看懂:
LinearLayoutManger、GridLayoutManger、StaggeredGridLayoutManager本别可以看做ListView、GridView、瀑布流的管理器,用来实现这三种布局结构。
package com.hongri.recyclerview.adapter;
import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.hongri.recyclerview.R;
import com.hongri.recyclerview.utils.Logger;
import java.util.ArrayList;
/**
* @author:zhongyao on 2016/6/29 17:34
* @description:HomeFragment--RecyclerView适配器
*/
public class HomeViewAdapter extends RecyclerView.Adapter<HomeViewAdapter.HomeViewHolder> {
private Context context;
private ArrayList<String> mData;
private HomeViewItemClickListener mItemClickListener;
private LayoutInflater mLayoutInflater;
public HomeViewAdapter(Context context, ArrayList<String> mData){
this.context = context;
this.mData = mData;
this.mLayoutInflater = LayoutInflater.from(context);
Logger.d("HomeViewAdapter");
}
public void setItemClickListener(HomeViewItemClickListener mItemClickListener) {
this.mItemClickListener = mItemClickListener;
}
@Override
public HomeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Logger.d("HomeViewAdapter--onCreateViewHolder()");
View view = this.mLayoutInflater.inflate(R.layout.home_recyclerview_item,parent,false);
HomeViewHolder holder = new HomeViewHolder(view,this.mItemClickListener);
return holder;
}
@Override
public void onBindViewHolder(HomeViewHolder holder, int position) {
Logger.d("HomeViewAdapter--onBindViewHolder()");
holder.tv.setText(mData.get(position));
}
@Override
public int getItemCount() {
Logger.d("HomeViewAdapter--getItemCount()");
return mData.size();
}
public class HomeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{
HomeViewItemClickListener mItemClickListener;
CardView cv_item;
TextView tv;
public HomeViewHolder(View itemView ,HomeViewItemClickListener mItemClickListener) {
super(itemView);
this.mItemClickListener = mItemClickListener;
Logger.d("HomeViewAdapter--HomeViewHolder");
cv_item = (CardView) itemView.findViewById(R.id.cv_item);
tv = (TextView) itemView.findViewById(R.id.tv);
cv_item.setOnClickListener(this);
cv_item.setOnLongClickListener(this);
}
@Override
public void onClick(View v) {
Logger.d("onClick()");
if (mItemClickListener != null){
mItemClickListener.onItemClick(v,getAdapterPosition());
}
}
/**
* 返回值为true时:长按时只调用onLongClick;
* 返回值为false时:长按时先调用onLongClick,然后调用onClick。
* @param v
* @return
*/
@Override
public boolean onLongClick(View v) {
Logger.d("onLongClick()");
if (mItemClickListener != null){
mItemClickListener.onItemLongClick(v,getAdapterPosition());
}
return true;
}
}
public interface HomeViewItemClickListener{
void onItemClick(View view,int position);
void onItemLongClick(View view,int position);
}
}
以上是RecyclerView的适配器,需要继承RecyclerView.Adapter:
RecyclerView.ViewHolder是默认自带的ViewHolder,所以不用像之前的ListView那样自己写ViewHolder了。
onCreateViewHolder用于加载item布局,并将其与Holder关联上,用于复用布局控件。
OnBindViewHolder用于展示数据。
RecyclerView没有像ListView中的setOnItemClickListener等的item点击监听事件,感觉这也是为了使RecyclerView更具灵活性吧,Google工程师其实就是将RecyclerView定义为一种容器,给开发者更大的发挥空间。这里其实就是写的item的一个监听回调事件,用过回调的,看起来就很容易了。
实现效果图:
以上只是一种类ListView实现方式主要代码,下面给出我最近一直在写的Demo,里面包含各种实现方式,GridView、瀑布流,还包含混合式布局的加载等都有所介绍。而且这个demo我也会持续更新,发现什么好玩的都希望写进去。也希望大家多多交流,一起进步。