package mcxtzhang.zandemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements ZanCallBack {
private static final String TAG = "zxt";
private RecyclerView mRv;
private RecyclerView.Adapter mAdapter;
private LinearLayoutManager mManager;
private List<ZanBean> mDatas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRv = (RecyclerView) findViewById(R.id.rv);
mRv.setLayoutManager(mManager = new LinearLayoutManager(this));
initDatas();
mRv.setAdapter(mAdapter = new ZanAdapter(this, mDatas));
}
private void initDatas() {
mDatas = new ArrayList<>();
mDatas.add(new ZanBean(false, 0));
mDatas.add(new ZanBean(false, 1));
mDatas.add(new ZanBean(true, 2));
mDatas.add(new ZanBean(true, 3));
mDatas.add(new ZanBean(true, 4));
mDatas.add(new ZanBean(false, 5));
mDatas.add(new ZanBean(false, 6));
}
@Override
public void onSuccess(int pos) {
Log.d(TAG, "onZanSuccess() called with: pos = [" + pos + "]");
//网络回调成功,改变数据,同时判断postion,如果positon在屏幕内则刷新UI 不在不用刷新。
//桥黑板!!这里不用也不应该刷新!因为ViewHolder是服用的
//操作的回调都不需要传入操作类型,因为点赞 取消点赞是互斥的操作,只要对原来的状态取反即可
if (pos < mDatas.size()) {//万一这个item被删除了
ZanBean zanBean = mDatas.get(pos);
if (null != zanBean) {//改变数据
zanBean.setZaned(!zanBean.isZaned());
}
if (pos <= mManager.findLastVisibleItemPosition() && pos >= mManager.findFirstVisibleItemPosition()) {
mAdapter.notifyItemChanged(pos);//定向刷新某个item
}
}
}
@Override
public void onError(int pos) {
Log.d(TAG, "onZanError() called with: pos = [" + pos + "]");
//网络回调失败,数据不用改变,只要判断postion是否在屏幕内,如果在改变UI,否则啥都不用做。
if (pos <= mManager.findLastVisibleItemPosition() && pos >= mManager.findFirstVisibleItemPosition()) {
mAdapter.notifyItemChanged(pos);//定向刷新某个item
}
}
}