热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

关于ViewPage2的数据刷新问题

问题我的App分为两个数据源,本地和线上,纯在本地和纯在线上玩是没有问题的,但是本地和线上的数据源进行切换就会出现问题,对此我查阅了一些资料,加上自己的一些理解,在这里记录一下原因

问题
我的App分为两个数据源,本地和线上,纯在本地和纯在线上玩是没有问题的,但是本地和线上的数据源进行切换就会出现问题,对此我查阅了一些资料,加上自己的一些理解,在这里记录一下

原因
我的ViewPage2继承与FragmentStateAdapter,而FragmentStateAdapter继承于 RecyclerView.Adapter,所以他是可以使用RecyclrView的刷新方法,为什么数据源更改之后fragment没有刷新呢,通过查看资料:

 

 

 

 

可以看到在gcFragment方法中吧新加的和原来的ItemId进行对不,如果不同就删除,但是又因为在原来的代码中ItemId就是Position,所以就导致了数据更改后没有反应,

解决
下面是我的解决办法
重写getItemI()方法和containsItem()方法,给他一个你自己创造的itemId,这样数据源更改后,发现Itemdid不同,就会把不同的删除。

 

 

 

 

package com.bosd.GansuLogistics.UI.PutOn;
import com.bosd.GansuLogistics.Data.Entity.TaskInfoDetail_json_puton;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
public class ScanWareInfoPagerAdapter extends FragmentStateAdapter
{
public List dataSource;
public ScanWareInfoPagerAdapter(@NonNull FragmentActivity fragmentActivity,
List
dataSource)
{
super(fragmentActivity);
this.dataSource = dataSource;
}
@NonNull
@Override
public Fragment createFragment(int position)
{
ScanWareInfoContentFragment fragment
= new ScanWareInfoContentFragment(
position,
dataSource.get(position));
return fragment;
}
@Override
public int getItemCount()
{
return dataSource.size();
}
@Override
public boolean containsItem(long itemId)
{
for(TaskInfoDetail_json_puton.CJsonDataBean bean:this.dataSource )
{
int b = bean.scanedCount;
if(bean.hashCode()+b == itemId)
{
return true;
}
}
return false;
}
@Override
public long getItemId(int position)
{
TaskInfoDetail_json_puton.CJsonDataBean dataBean
= this.dataSource.get(position);
long hashcode = dataBean.hashCode()+ dataBean.scanedCount;
return hashcode;
}
}

package com.bosd.GansuLogistics.UI.PutOn;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import com.Iori.Util.CommUtil;
import com.Iori.Util.KeyboardUtil;
import com.bosd.GansuLogistics.Data.Entity.TaskInfoDetail_json_puton;
import com.bosd.GansuLogistics.Data.Entity.TaskInfo_json_puton;
import com.bosd.GansuLogistics.R;
import java.text.MessageFormat;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
public class ScanWareInfoContentFragment extends Fragment
{
int iPosition;
private TextView txtScanedCount;
private TaskInfoDetail_json_puton.CJsonDataBean dataSource;// = parentActivity.dataSource.cJsonData.get(iPosition);
public ScanWareInfoContentFragment(int position, TaskInfoDetail_json_puton.CJsonDataBean dataSource)
{
iPosition
= position;
this.dataSource = dataSource;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState)
{
PutOnScanWareActivity parentActivity
= (PutOnScanWareActivity) getActivity();
View v
= super.onCreateView(inflater, container, savedInstanceState);
View view
= inflater.inflate(R.layout.layout_items_put_on_scan_ware, container, false);
TextView txtProductName
= view.findViewById(R.id.txtProductName);
TextView txtNum
= view.findViewById(R.id.txtNum);
TextView txtWareCode
= view.findViewById(R.id.txtWareCode);
TextView txtSpec
= view.findViewById(R.id.txtSpec);
TextView txtBatchNo
= view.findViewById(R.id.txtBatchNo);
TextView txtDProduct
= view.findViewById(R.id.txtDProduct);
TextView txtDExp
= view.findViewById(R.id.txtDExp);
TextView txtProducter
= view.findViewById(R.id.txtProducter);
TextView txtWillbeCount
= view.findViewById(R.id.txtWillbeCount);
txtScanedCount
= view.findViewById(R.id.txtScanedCount);
txtProductName.setText(dataSource.cWareName);
txtNum.setText(dataSource.cOrder);
txtWareCode.setText(dataSource.cWareCode);
txtSpec.setText(dataSource.cSpec);
txtBatchNo.setText(dataSource.cBatchNO);
txtDProduct.setText(dataSource.dProduct);
txtDExp.setText(dataSource.dExp);
txtProducter.setText(dataSource.cProducter);
txtWillbeCount.setText(dataSource.nQntty);
txtScanedCount.setText(MessageFormat.format(
"{0,number,#}", dataSource.scanedCount));
ViewPager2 pager
= parentActivity.findViewById(R.id.pager);
ScanWareInfoPagerAdapter adapter
= (ScanWareInfoPagerAdapter)pager.getAdapter();
ImageButton btnEdit
= view.findViewById(R.id.btnEdit);
btnEdit.setOnClickListener(
new View.OnClickListener()
{
@Override
public void onClick(View view)
{
AlertDialog dialog
= CommUtil.showDialog(
ScanWareInfoContentFragment.
this.getContext(),
R.layout.dialog_layout_modify_scan_count_puton,
new CommUtil.IoriButtonClickListener()
{
@Override
public void btnOK_click(DialogInterface dialog, Button sender)
{
View dialogView
= sender.getRootView();
try
{
EditText txtCount
= dialogView.findViewById(R.id.txtScanedCount);
String strCount
= txtCount.getText().toString().trim();
dataSource.scanedCount
= Integer.parseInt(strCount);
//adapter.notifyDataSetChanged();
adapter.notifyItemChanged(iPosition);
//updateContent(dataSource.scanedCount);
dialog.dismiss();
}
catch (Exception ex)
{
CommUtil.alert(ScanWareInfoContentFragment.
this.getContext(), null, ex.getMessage());
}
}
});
TextView txtEnabledCount
= dialog.findViewById(R.id.txtEnabledCount);
txtEnabledCount.setText(dataSource.nQntty);
final EditText txtCount = dialog.findViewById(R.id.txtScanedCount);
txtCount.setText(MessageFormat.format(
"{0,number,#}",dataSource.scanedCount));
txtCount.postDelayed(
new Runnable()
{
@Override
public void run()
{
KeyboardUtil.showKeyboard(txtCount);
}
},
500);
KeyboardUtil.enabledDialogInput(dialog);
}
});
return view;
}
public void updateContent(int scanedCount)
{
txtScanedCount.setText(MessageFormat.format(
"{0,number,#}", scanedCount));
}
}

package com.bosd.GansuLogistics.UI.PutOn;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.Iori.Util.EventLocker;
import com.bosd.GansuLogistics.Data.Entity.TaskInfoDetail_json_puton;
import com.bosd.GansuLogistics.R;
import com.bosd.GansuLogistics.UI.Common.CameraScanActivity;
import java.util.ArrayList;
import java.util.List;
public class PutOnScanWareActivity extends CameraScanActivity
{
public TaskInfoDetail_json_puton dataSource;
private PageChangeCallback pageChangeCallback = new PageChangeCallback(this);
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_put_on_scan_ware);
setTitle(
"选品上架");
setCustomActionBar();
//
dataSource = (TaskInfoDetail_json_puton) getIntent().getExtras().getSerializable("dataSource");
ScanWareInfoPagerAdapter adapter
= new ScanWareInfoPagerAdapter(this, dataSource.cJsonData);
ViewPager2 pager
= findViewById(R.id.pager);
pager.registerOnPageChangeCallback(
this.pageChangeCallback);
pager.setAdapter(adapter);
}
@Override
protected void onResume()
{
super.onResume();
initCamera();
}
@Override
protected void onDestroy()
{
super.onDestroy();
ViewPager2 pager
= findViewById(R.id.pager);
pager.unregisterOnPageChangeCallback(
this.pageChangeCallback);
}
public void btnOK_click(View sender)
{
EventLocker.lock(sender);
ViewPager2 pager
= findViewById(R.id.pager);
ScanWareInfoPagerAdapter adapter
= (ScanWareInfoPagerAdapter)pager.getAdapter();
adapter.dataSource.remove(
0);
adapter.notifyDataSetChanged();
}
public static class PageChangeCallback extends ViewPager2.OnPageChangeCallback
{
private PutOnScanWareActivity parentActivity;
public PageChangeCallback(PutOnScanWareActivity activity)
{
super();
parentActivity
= activity;
}
@Override
public void onPageSelected(int position)
{
super.onPageSelected(position);
TextView txtPosition
= this.parentActivity.findViewById(R.id.txtPosition);
txtPosition.setText(
"");
}
}
}

 

 

 

 

————————————————
版权声明:本文为CSDN博主「zhuQuA」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42780052/article/details/115344744


南来地,北往的,上班的,下岗的,走过路过不要错过!





======================个性签名=====================

之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?

下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!

如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.

我的开发工具


对于博客园里的网友,不敢称为叫"程序员"的人,你们攻击性太强,看来你们是不会想到我的用意的.园子里有不少人都非常喜欢Jeffrey,是因为它的第一版 框架设计 CLR via C#.

可是从第一版到现在的第三版,没有看到真正底层的东西,内容仅仅是比MSDN文档更丰富一些,可能是我的要求太高了吧.

也就是因为它很多时候会接触到微软开发人员,会经常聊聊某些问题而已,而它又将这些问题反应到书中.也许它就像一个小记者.

它的年龄大我们不多,我的孩子与它小儿子一般大,如果我能向它那样出入微软与它们开发人员长时间交流,不仅仅会牛成它这样.....

可是微软的开发人员不会扔太多时间在它这儿的.所以它会整天追着这个,赶它那个..屁颠个不停吧...

而它的另一版被称为好书的 Windows核心编程,更是没有什么深度可言,仅仅是将windows提供的api,以及内核功能再重申了一遍.

这些书对晋及编程知识是有些贡献的,再说一遍我不是在匾低谁,说说想法而已.



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 高效提取PDF页面的实用技巧
    在学习和工作中,我们经常需要与他人共享PDF格式的资料。然而,有时只需要分享部分内容,而不仅仅是整个文档。本文将介绍如何使用福昕阅读器领鲜版高效地提取PDF页面,以提高文件传输效率和查阅便捷性。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • MacOS上高效的SVN管理工具Cornerstone安装指南
    本文详细介绍如何在MacOS上安装和配置高效SVN管理工具Cornerstone,涵盖其主要功能和优化后的性能提升。 ... [详细]
author-avatar
zero__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有