java - 每当我带来更多数据时重复一些项目?
问题描述
我创建了一个加载函数来通过一个 PHP 文件获取项目,该文件每次调用 php 文件时都会将数据库中的 3 个名称元素添加到 Android,所以我做了加载函数的函数,之后在 Android 屏幕上显示 3 个名称Loadmore函数,发现一个重复的问题中间的名字和数据库不一样,看这些截图:https ://ibb.co/sFg6p7N希望大家帮帮我并添加相应的代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.activity_customer, container, false);
//View rootView = inflater.inflate(R.xml.pref, container, false);
//Intent intent = new Intent(PreferenceDemoActivity.this,PrefsActivity.class);
// startActivity(intent);
this.context = getActivity();
recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
customers = new ArrayList<>();
adapter = new CustomerAdapter(context,customers);
adapter.setLoadMoreListener(new CustomerAdapter.OnLoadMoreListener(){
@Override
public void onLoadMore() {
recyclerView.post(new Runnable() {
@Override
public void run() {
int index = customers.size()-1;
loadMore(index);
}
});
//Calling loadMore function in Runnable to fix the
// java.lang.IllegalStateException: Cannot call this method
while RecyclerView is computing a layout or scrolling error
}
});
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
recyclerView.setAdapter(adapter);
api = ServiceGenerator.createService(API.class);
load(0);
return rootView;
}
private void load(int index){
Call<List<Customer>> call = api.getCustomer(index);
call.enqueue(new Callback<List<Customer>>(){
@Override
public void onResponse(Call<List<Customer>> call, final
Response<List<Customer>> response){
Log.i("TRUE_TRUE_","Yes "+response.body().get(2).name);
if(response.isSuccessful()){
getActivity().runOnUiThread(new Runnable(){
public void run(){
customers.addAll(response.body());
adapter.notifyDataChanged();
}});
getActivity().runOnUiThread(new Runnable(){
public void run() {
}});
}else{
Log.e(TAG," Response Error "+String.valueOf(response.code()));
}
}
@Override
public void onFailure(Call<List<Customer>> call, Throwable t) {
Log.e(TAG," Response Error "+t.getMessage());
}
});
}
private void loadMore(int index){
// add loading progress view ....
customers.add(new Customer("load"));
adapter.notifyItemInserted(customers.size()-1);
Log.i("customers.size() ","Yes "+customers.size()); // = 4 -1 =3
Log.i("Index_","Yes "+index);// = 2
Call<List<Customer>>call = api.getCustomer(index);
call.enqueue(new Callback<List<Customer>>(){
@Override
public void onResponse(Call<List<Customer>> call,
Response<List<Customer>>response) {
if(response.isSuccessful()){
// remove loading view .......
customers.remove(customers.size()-1);
// Log.i("LastItemRemove","Yes "+response.body().get(2).name);// = 2
List<Customer>result=response.body();
if(result.size()>0){
// add loaded data
customers.addAll(result);
}else{//result size 0 means there is no more data available at server
adapter.setMoreDataAvailable(false);
//telling adapter to stop calling load more as no more server data available
Toast.makeText(context,"No More Data Available",Toast.LENGTH_LONG).show();
}
adapter.notifyDataChanged();
//should call the custom method adapter.notifyDataChanged here to get the correct loading status
}else{
Log.e(TAG," Load More Response Error "+String.valueOf(response.code()));
}
}
@Override
public void onFailure(Call<List<Customer>>call,Throwable t) {
Log.e(TAG," Load More Response Error "+t.getMessage());
}
});
}
解决方案
在你的onLoadMore回调中改变这个
int index = customers.size()-1;
loadMore(index);
对此
loadMore(customers.size());
您在每次加载时再次查询最后一个实体
推荐阅读
- azure - 如何在 HDInsight 上安装 Presto?
- mysql - 如果查询,则无法处理 Mysql 多个 else 的正确语法
- hadoop - 可以将 Hive 外部表位置创建到外部 hadoop 集群吗?
- python - 具有复杂路径的 Django urls 行为
- html - 在引导日期选择器中设置默认日期的问题
- javascript - 图像忽略来自 JavaScript 函数的“zIndex”指令
- android - 将APK转换为最小APK后如何解析?
- python - C++ 和 python 中的代码相同,但输出不同
- r - 如何使用ggplot在堆叠和分组条形图中显示值标签
- java - 将参数值从我的实现服务传递到我的 RestController java springboot