适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private JSONArray data;
public MyAdapter(Context context, JSONArray data) {
this.context = context;
this.data = data;
}
//创建view设置给ViewHolder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//第一种方式 自适应不能填充父窗体 从新设置宽度
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null);
//得到WindowManager
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
//得到屏幕的宽
int width = wm.getDefaultDisplay().getWidth();
//获取LayoutParams
RecyclerView.LayoutParams params = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
//把屏幕的宽给view
params.width = width;
view.setLayoutParams(params);
//第二种方式
// View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent,false);
final MyViewHolder holder = new MyViewHolder(view);
//使用view的条目点击事件
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//自己获取position
int position = holder.getLayoutPosition();
//设置监听
if (listener != null) {
listener.onRecyclerViewItemClick(position);
}
}
});
//使用view的长按事件
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//自己获取position
int position = holder.getLayoutPosition();
//设置监听
if (listener != null) {
longListener.onRecyclerViewLongItemClick(position);
}
//true代表消费事件 不继续传递
return true;
}
});
return holder;
}
//绑定数据
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
try {
/* ViewGroup.LayoutParams layoutParams = holder.iv.getLayoutParams();
position = position % 2;
Log.i("sss", position + "");
if (position == 0) {
layoutParams.height = 200;
} else {
layoutParams.height = 300;
}
holder.iv.setLayoutParams(layoutParams);*/
JSONObject jsonObject = data.getJSONObject(position);
String image_url = jsonObject.optString("image_url");
String title = jsonObject.getString("title");
holder.tv_title.setText(title);
Picasso.with(context).load(image_url).placeholder(R.mipmap.ic_launcher).into(holder.iv);
} catch (JSONException e) {
e.printStackTrace();
}
}
//数据长度
@Override
public int getItemCount() {
return data.length();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView iv;
private TextView tv_title;
public MyViewHolder(View itemView) {
super(itemView);
iv = (ImageView) itemView.findViewById(R.id.iv);
tv_title = (TextView) itemView.findViewById(R.id.tv_title);
}
}
/**
* 条目点击
*/
//声明接口
private OnRrecyclerViewItemClickListener listener;
//定义接口 和抽象方法
public interface OnRrecyclerViewItemClickListener {
void onRecyclerViewItemClick(int position);
}
//提供设置监听的方法
public void setOnRrecyclerViewItemClickListener(OnRrecyclerViewItemClickListener listener) {
this.listener = listener;
}
/**
* 条目长按
*/
//声明接口
private OnRecyclerViewLongItemClickListener longListener;
//定义接口 和抽象方法
public interface OnRecyclerViewLongItemClickListener {
void onRecyclerViewLongItemClick(int position);
}
//提供设置监听的方法
public void setOnRecyclerViewLongItemClickListener(OnRecyclerViewLongItemClickListener longListener) {
this.longListener = longListener;
}
//添加数据
public void addData(int position, JSONObject jsonObject) {
try {
data.put(position, jsonObject);
notifyItemInserted(position);
} catch (JSONException e) {
e.printStackTrace();
}
}
//删除数据
@TargetApi(Build.VERSION_CODES.KITKAT)
public void removeData(int position) {
data.remove(position);
notifyItemRemoved(position);
}
//改变数据
@TargetApi(Build.VERSION_CODES.KITKAT)
public void changeData(int position, JSONObject jsonObject) {
try {
data.remove(position);
data.put(position, jsonObject);
notifyItemChanged(position);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
MainActivity
private RecyclerView rv;
private String url = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one";
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
String json = (String) msg.obj;
try {
final JSONObject jsonObject = new JSONObject(json);
final JSONArray data = jsonObject.getJSONArray("data");
//设置适配器
adapter = new MyAdapter(MainActivity.this, data);
rv.setAdapter(adapter);
//通过适配器回调监听
adapter.setOnRrecyclerViewItemClickListener(new MyAdapter.OnRrecyclerViewItemClickListener() {
@Override
public void onRecyclerViewItemClick(int position) {
Toast.makeText(MainActivity.this, "点击条目:" + position, Toast.LENGTH_SHORT).show();
//创建动画
final MyItemAnimator animator = new MyItemAnimator();
animator.setAddDuration(2000);
/* try {
JSONObject jo = data.getJSONObject(position);
adapter.addData(position, jo);
} catch (JSONException e) {
e.printStackTrace();
}*/
//animator.setRemoveDuration(1000);
//添加动画
rv.setItemAnimator(animator);
}
});
adapter.setOnRecyclerViewLongItemClickListener(new MyAdapter.OnRecyclerViewLongItemClickListener() {
@Override
public void onRecyclerViewLongItemClick(int position) {
Toast.makeText(MainActivity.this, "长按条目:" + position, Toast.LENGTH_SHORT).show();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
break;
}
}
};
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
rv = (RecyclerView) findViewById(R.id.rv);
//获取数据
getData();
//设置LinearLayoutManager布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//设置GridLayoutManager布局管理器
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
//设置StaggeredGridLayoutManager布局管理器
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
//把布局管理器给RecyclerView
rv.setLayoutManager(linearLayoutManager);
//添加华丽分割线
MyDecoration decoration = new MyDecoration(this, LinearLayoutManager.VERTICAL);
rv.addItemDecoration(decoration);
//给表格添加华丽的分割线
/* GridDivider gridDivider = new GridDivider(this, 2, Color.BLUE);
rv.setLayoutManager(gridLayoutManager);
rv.addItemDecoration(gridDivider);*/
}
private void getData() {
OkHttp3Utils.doGet(url, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
Message message = handler.obtainMessage(0, json);
message.sendToTarget();
}
});
}
}