Closed wangmingqiang closed 6 years ago
恩 是的 大神 我在加载出来更多数据的时候notifyDataSetChanged了
我设置动画可以执行多次 前期加载的20条数据是正常的(我用的是从左到右的动画) 在加载更多的时候拿到数据以后我就notifyDataSetChanged了,这时候界面上展示的效果就是当前的界面的item都会从左到右执行一次
package com.yidu.yidutool.activity;
import android.content.Context; import android.content.Intent; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener;
import com.base.sdk.net.http.BasicResponse; import com.base.sdk.net.http.RequestParams; import com.chad.library.adapter.base.BaseQuickAdapter; import com.yidu.yidutool.adapter.MyAroundpointAdapter; import com.yidu.yidutool.api.CommonAPI; import com.yidu.yidutool.common.Constants; import com.yidu.yidutool.common.Global; import com.yidu.yidutool.entity.AroundPoint; import com.yidu.yidutool.utils.JsonUtils; import com.yidu.yidutool.utils.NetUtils; import com.yidu.yidutool.utils.PrefUtils; import com.yidu.yidutool.utils.ToastUtils; import com.yidu.yidutool2.R;
import java.util.ArrayList; import java.util.List;
public class AroundPointListActivity2 extends BaseActivity implements OnClickListener {
private static final String TAG = "AroundPointListActivity";
public static final String EXTRA_LOC_LNG = "extra_loc_lng";
public static final String EXTRA_LOC_LAT = "extra_loc_lat";
public static final String EXTRA_LOC_CITY = "extra_loc_city";
public static final String EXTRA_LOC_ADDR = "extra_loc_addr";
private RecyclerView recyclerview;
private List<AroundPoint> mList = new ArrayList();
private ArrayList<AroundPoint> points;
private MyAroundpointAdapter adapter;
private double mLat, mLng;
private int mCityId;
private boolean isScrollDown;
private LinearLayoutManager layoutManager;
@Override
protected void setDataToTitle() {
setTitleBarText(R.string.around_point_title);
}
@Override
protected void initView(View rootView) {
initData();
initListView();
}
private void initData() {
mLat = getIntent().getDoubleExtra(EXTRA_LOC_LAT, 0);
mLng = getIntent().getDoubleExtra(EXTRA_LOC_LNG, 0);
mCityId = getIntent().getIntExtra(EXTRA_LOC_CITY, 0);
}
@Override
protected int getResourceId() {
return R.layout.activity_aroundpoint_list;
}
private void initListView() {
findViewById(R.id.ll_search_yidu_wd).setOnClickListener(this);
recyclerview= (RecyclerView) findViewById(R.id.recyclerview);
//创建布局管理
layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerview.setLayoutManager(layoutManager);
//创建适配器
adapter=new MyAroundpointAdapter(R.layout.activity_aroundpoint_list_item, mList);
//给RecyclerView设置适配器
recyclerview.setAdapter(adapter);
//动画
adapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_LEFT);
//设置是否只执行一次动画
adapter.isFirstOnly(true);
//条目点击事件
adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
AroundPoint point = mList.get(position);
CarListActivity.startCarlistActivity(AroundPointListActivity2.this, Integer.valueOf(point.wd_id), "", point.wdtype, "");
}
});
//预加载,自动加载
recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {// RecyclerView已经停止滑动
int lastVisibleItem;
// 获取RecyclerView的LayoutManager
// 获取到最后一个可见的item
lastVisibleItem = layoutManager.findLastVisibleItemPosition();
// 获取item的总数
int totalItemCount = layoutManager.getItemCount();
//并且最后一个可见的item为最后一个item
//并且是向下滑动
if (lastVisibleItem >= totalItemCount - 1 && isScrollDown) {
// 此处调用加载更多回调接口的回调方法
loadData();
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
isScrollDown = dy > 0;
}
});
// //上拉加载更多 // adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { // @Override // public void onLoadMoreRequested() { // loadData(); // } // },recyclerview);
loadData();
}
private void loadData() {
RequestParams params = new RequestParams();
if (mLat != 0 || mLng != 0) {
params.put("lat", mLng);
params.put("lng", mLat);
}
String companyIds = PrefUtils.getString(Global.getInst().getUserCurrentChooseadCityId() + Constants.PREFS_CHOOSED_COMPANY_IDS);
if (!TextUtils.isEmpty(companyIds)) {
params.put("company_ids", companyIds);
}
params.put("city_id", mCityId);
params.put("start", mList.size());
params.put("offset", Constants.OFFSET);
params.put("company_ids", PrefUtils.getString(Global.getInst().getUserCurrentChooseadCityId() + Constants.PREFS_CHOOSED_COMPANY_IDS));
NetUtils.request(Constants.AROUND_POINT_LIST_RELATIVE_URL, params, new NetUtils.OnFinishCallBack() {
@Override
public void onSuccess(CommonAPI.CommonBasicResponse response) {
points = JsonUtils.fromJsonToArrayList(response.data, AroundPoint.class);
//加载完成(注意不是加载结束,而是本次数据加载结束并且还有下页数据)不设置的话只能加载一次的数据
adapter.loadMoreComplete();
if (mList.size() == 0){
mList.addAll(points);
} else {
for (AroundPoint point : points) {
if (mList.contains(point)){
continue;
}else {
mList.add(point);
}
}
}
adapter.notifyDataSetChanged();
}
@Override
public void onFault(BasicResponse response) {
ToastUtils.showShortToast(response.msg);
}
@Override
public void onOther(BasicResponse response) {
ToastUtils.showShortToast(response.msg);
}
});
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.ib_title_bar_left) {
finish();
} else if (id == R.id.ib_title_bar_right) {
finish();
} else if (id == R.id.ll_search_yidu_wd) {
SearchYiduPointActiviity.startIntent(this, (ArrayList) mList);
}
}
public static void startIntent(Context ctx, double lng, double lat, int cityId) {
Intent intent = new Intent(ctx, AroundPointListActivity2.class);
intent.putExtra(EXTRA_LOC_LNG, lng);
intent.putExtra(EXTRA_LOC_LAT, lat);
intent.putExtra(EXTRA_LOC_CITY, cityId);
ctx.startActivity(intent);
}
}
你可以用BaseQuickAdapter提供的addData方法,如果自己控制就需要用notifyItemRangeChanged,而不能用notifyDataSetChanged
完美解决 很感谢 这个很吊的库 以后就是他了
你说的闪动是重复执行动画?你是不是加载更多的时候调notifyDataSetChanged了?
1591