知识点:接口回调,recycleview的adapter方法
难点:接口对象的实例化 , 接口对象中自定义方法的实现和重写
package com.qianfeng.xiuxiuproject.showpic.recomment.childfragment;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.Volley;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.qianfeng.xiuxiuproject.R;
import com.qianfeng.xiuxiuproject.common.constans.NetContents;
import com.qianfeng.xiuxiuproject.common.http.IStringRequest;
import com.qianfeng.xiuxiuproject.common.parser.JsonUtils;
import com.qianfeng.xiuxiuproject.common.utils.PreferencesUtils;
import com.qianfeng.xiuxiuproject.common.utils.StringUtils;
import com.qianfeng.xiuxiuproject.showpic.base.ReBaseFragment;
import com.qianfeng.xiuxiuproject.showpic.main.activity.MainActivity;
import com.qianfeng.xiuxiuproject.showpic.recomment.adapter.RecyclerViewAdapter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by Administrator on 2016/2/23.
*/
public class ChildRecommentFragment extends ReBaseFragment implements RecyclerViewAdapter.OnItemViewClickLisenter, SwipeRefreshLayout.OnRefreshListener {
private RecyclerView recyclerview;
private RecyclerViewAdapter recyclerViewAdapter;
private SwipeRefreshLayout mSwipeRefreshWidget;
private Map dataMap;
private Map mapObj;
private List
package com.qianfeng.xiuxiuproject.showpic.recomment.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Message;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.qianfeng.xiuxiuproject.R;
import com.qianfeng.xiuxiuproject.common.utils.CalendarUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by Administrator on 2016/2/25.
*/
public class RecyclerViewAdapter extends RecyclerView.Adapter.ViewHolder> {
private int width;
private int height;
private List> listOfText = new ArrayList>();
private LayoutInflater inflater;
private OnItemViewClickLisenter onItemViewClickListener;
private static final int TYPE_ITEM = 0;
private static final int TYPE_FOOTER = 1;
public static boolean isFirstFragment = true;
private List image_url_list = new ArrayList();
private String user_photo_url;
private DisplayImageOptions options;
private ImageLoader imageLoader;
public static Handler adapterhander = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what != 1) {
Log.e("=====", "=======msg.what" + msg.what);
isFirstFragment = false;
} else {
isFirstFragment = true;
}
}
};
public RecyclerViewAdapter(Context context, List> imagesMap, DisplayImageOptions options) {
this.listOfText.addAll(imagesMap);
this.inflater = LayoutInflater.from(context);
this.options = options;
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
width = wm.getDefaultDisplay().getWidth();
height = wm.getDefaultDisplay().getHeight();
}
public void notifyDataSetChanged1(List> imagesMap) {
this.listOfText = imagesMap;
this.notifyDataSetChanged();
}
//定义接口和接口的方法:回传接口对象(实际上回传的是接口对象已经实现的方法,包括方法中的参数值)
//这些接口在adapter实现(实现时回调item加载的view对象及其本身的监听方法:如onclick,onLongClick),然后在Fragment中重写这个接口里自定义的监听方法
public interface OnItemViewClickLisenter {
void onItemClick(View view, int position);
void onItemViewLongClick(View view, int position);
void onItemViewClick(View view, int position, boolean blick);
void onItemfooterClick(TextView view, int position);
}
public void setOnItemViewClickListener(OnItemViewClickLisenter onItemViewClickListener) {
this.onItemViewClickListener = onItemViewClickListener;
}
@Override
public int getItemCount() {
Log.e("=====", "=======getItemCount");
return listOfText.size() + 1;
}
@Override
public int getItemViewType(int position) {
Log.e("=====", "=======getItemViewType");
if (position + 1 == getItemCount()) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.e("=====", "=======onCreateViewHolder");
if (viewType == TYPE_ITEM) {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.fragment_item_imageview, null);
ItemViewHolder itemViewHolder = new ItemViewHolder(view);
view.setLayoutParams(new LinearLayout.LayoutParams(width, height / 2));
return itemViewHolder;
}
// type == TYPE_FOOTER 返回footerView
else if (viewType == TYPE_FOOTER) {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.fragement_item_footer, null);
view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
return new FooterViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
Log.e("=====", "=======onBindViewHolder");
image_url_list.clear();
for (int i = 0; i < listOfText.size(); i++) {
String image_url_raw = listOfText.get(i).get("image_url").toString();
String image_url = "http://wpstatic.zuimeia.com/" + image_url_raw;
image_url_list.add(image_url);
}
Log.e("======", "=========image_url_list.size():" + image_url_list.size());
imageLoader = ImageLoader.getInstance();
if (holder instanceof ItemViewHolder) {
if (isFirstFragment) {
((ItemViewHolder) holder).items_linear2.setVisibility(View.VISIBLE);
((ItemViewHolder) holder).items_linear1.setVisibility(View.GONE);
String[] pub_times = listOfText.get(position).get("pub_time").toString().split("-");
((ItemViewHolder) holder).items_text4.setText(pub_times[2]);
((ItemViewHolder) holder).items_text5.setText(CalendarUtils.getMyMonthStr(pub_times[1]));
((ItemViewHolder) holder).items_text6.setText(pub_times[0]);
((ItemViewHolder) holder).items_text7.setText(listOfText.get(position).get("description").toString());
} else {
((ItemViewHolder) holder).items_linear2.setVisibility(View.GONE);
((ItemViewHolder) holder).items_linear1.setVisibility(View.VISIBLE);
((ItemViewHolder) holder).items_text2.setText(listOfText.get(position).get("description").toString());
Map photo_user = (Map) listOfText.get(position).get("photo_user");
((ItemViewHolder) holder).items_text3.setText(photo_user.get("user_name").toString());
user_photo_url = photo_user.get("user_photo").toString();
((ItemViewHolder) holder).items_image3.setTag(user_photo_url);
((ItemViewHolder) holder).items_image3.setImageResource(R.drawable.icon_personalpage_normal);
imageLoader.loadImage(user_photo_url, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (((ItemViewHolder) holder).items_image3.getTag().equals(imageUri)) {
((ItemViewHolder) holder).items_image3.setImageBitmap(loadedImage);
}
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
}
((ItemViewHolder) holder).items_image1.setTag(image_url_list.get(position));
((ItemViewHolder) holder).items_image1.setImageResource(R.drawable.preview_icon_32);
imageLoader.loadImage(image_url_list.get(position), options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (((ItemViewHolder) holder).items_image1.getTag().equals(imageUri)) {
((ItemViewHolder) holder).items_image1.setImageBitmap(loadedImage);
}
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
((ItemViewHolder) holder).items_text1.setText(listOfText.get(position).get("up_times").toString());
if (onItemViewClickListener != null) {
((ItemViewHolder) holder).items_image1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemViewClickListener.onItemClick(v, ((ItemViewHolder) holder).getLayoutPosition());
}
});
((ItemViewHolder) holder).items_image1.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
onItemViewClickListener.onItemViewLongClick(v, ((ItemViewHolder) holder).getLayoutPosition());
return true;
}
});
((ItemViewHolder) holder).items_linear_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemViewClickListener.onItemViewClick(((ItemViewHolder) holder).items_linear_click, ((ItemViewHolder) holder).getLayoutPosition(), false);
}
});
}
} else if (holder instanceof FooterViewHolder) {
if (onItemViewClickListener != null) {
((FooterViewHolder) holder).footer_textview.setLayoutParams(new LinearLayout.LayoutParams(width, height / 12));
((FooterViewHolder) holder).footer_textview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemViewClickListener.onItemfooterClick(((FooterViewHolder) holder).footer_textview, holder.getLayoutPosition());
}
});
}
}
}
class ItemViewHolder extends RecyclerView.ViewHolder {
private ImageView items_image1;
// private ImageView items_image2;
private LinearLayout items_linear_click, items_linear1, items_linear2;
private TextView items_text4;
private TextView items_text6;
private TextView items_text5;
private TextView items_text7;
private TextView items_text1;
private TextView items_text2;
private TextView items_text3;
private ImageView items_image3;
public ItemViewHolder(View itemView) {
super(itemView);
items_linear2 = ((LinearLayout) itemView.findViewById(R.id.items_linear2));
items_text4 = ((TextView) itemView.findViewById(R.id.items_text4));
items_text5 = ((TextView) itemView.findViewById(R.id.items_text5));
items_text6 = ((TextView) itemView.findViewById(R.id.items_text6));
items_text7 = ((TextView) itemView.findViewById(R.id.items_text7));
items_text1 = ((TextView) itemView.findViewById(R.id.items_text1));
items_image1 = ((ImageView) itemView.findViewById(R.id.items_image1));
// items_image2 = ((ImageView) itemView.findViewById(R.id.items_image2));
items_linear_click = ((LinearLayout) itemView.findViewById(R.id.items_linear_click));
items_linear1 = ((LinearLayout) itemView.findViewById(R.id.items_linear1));
items_text2 = ((TextView) itemView.findViewById(R.id.items_text2));
items_image3 = ((ImageView) itemView.findViewById(R.id.items_image3));
items_text3 = ((TextView) itemView.findViewById(R.id.items_text3));
}
}
class FooterViewHolder extends RecyclerView.ViewHolder {
private TextView footer_textview;
public FooterViewHolder(View view) {
super(view);
footer_textview = (TextView) view.findViewById(R.id.items_footer_text);
}
}
}
请读者按照图片中文字介绍理解接口回调的真正含义,可以在代码中找到图片中对应的代码段。另:接口回调在网络请求结果对象处理,自定义view监听操作或其他第三方SDK 回调对象应用广泛,只需要按照上边的步骤做,就很easy啦!