当前位置: 首页 > 知识库问答 >
问题:

将数据从视图寻呼机中的片段传递到已发生的特定操作的前一个片段

洪伟兆
2023-03-14

我看过以下文章,

>

在视图寻呼机中的片段之间传递数据

如何将数据从一个片段传输到另一个片段android

Android:在viewpager片段之间传递数据的最佳方法

我还没有弄清楚如何通知父片段一行已在子片段中删除。我的父片段由一个具有多行的回收器视图组成。我想重播(??)没有删除行的回收器视图。任何帮助都将不胜感激。

这是我的Github repo:https://github.com/manoflogan/android-projects/blob/menu/02-Criminalntent/

这是我的用例:

>

  • 当应用程序启动时,用户将看到一个空视图。空视图的图像

    如果他们想添加新的犯罪对象,他们将单击/点击菜单栏中的图标,如上图所示

    此操作生成映射到其他活动的意图https://github.com/manoflogan/android-projects/blob/menu/02-Criminalntent/app/src/main/java/com/krishnanand/criminalintent/CrimeListFragment.java#L67.

    这将加载一个活动,其中定义了一个ViewPager,并在其中关联了一个片段https://github.com/manoflogan/android-projects/blob/menu/02-Criminalntent/app/src/main/java/com/krishnanand/criminalintent/CrimePagerActivity.java#L60.创建的犯罪对象如下所示。

    图像显示已创建的犯罪对象。创建的犯罪对象。这显示了用户按下后退按钮时的视图,如下所示。用户按下后退按钮后创建并显示的多行

    这是我尝试更新回收器已删除行的方法。https://github.com/manoflogan/android-projects/blob/menu/02-Criminalntent/app/src/main/java/com/krishnanand/criminalintent/CrimeListFragment.java#L110

    如果我有N行,并且如果我想删除除最后一行以外的任何行,应用程序将崩溃,并出现以下错误。

    ---------崩溃开始2018-11-23 17:40:49.932 13876-13876/com。克里希南德。犯罪内容E/AndroidRuntime:致命异常:主进程:com。克里希南德。刑事内容,PID:13876爪哇。lang.IndexOutOfBoundsException:检测到不一致。无效的视图保持架适配器位置ViewHolder{6d1120f position=1 id=-1,oldPos=1,pLpos:-1废料[附件垃圾]tmpDetached no parent}android。支持v7.widget。RecyclerView{4220554 VFED…...ID 0,0-10801584#7f070032应用程序:ID/crime\u recycler\u view},适配器:com。克里希南德。犯罪意图。犯罪碎片$CrimeAdapter@3140cfd,布局:android。支持v7.widget。LinearLayoutManager@42ccdf2,上下文:com。克里希南德。犯罪意图。CrimeListActivity@95fdd1a在android上。支持v7.widget。RecyclerView$回收商。在android上验证eViewHolderforOffsetPosition(RecyclerView.java:5715)。支持v7.widget。RecyclerView$回收商。android上的TryGetViewHolderPositionByDeadline(RecyclerView.java:5898)。支持v7.widget。RecyclerView$回收商。android上的getViewForPosition(RecyclerView.java:5858)。支持v7.widget。RecyclerView$回收商。android上的getViewForPosition(RecyclerView.java:5854)。支持v7.widget。LinearLayoutManager$布局状态。接下来(LinearLayoutManager.java:2230)在android上。支持v7.widget。LinearLayoutManager。android上的layoutChunk(LinearLayoutManager.java:1557)。支持v7.widget。LinearLayoutManager。android上的fill(LinearLayoutManager.java:1517)。支持v7.widget。LinearLayoutManager。android上的onLayoutChildren(LinearLayoutManager.java:612)。支持v7.widget。回收视图。android上的dispatchLayoutStep1(RecyclerView.java:3875)。支持v7.widget。回收视图。android上的dispatchLayout(RecyclerView.java:3639)。支持v7.widget。回收视图。android上的consumePendingUpdateOperations(RecyclerView.java:1877)。支持v7.widget。RecyclerView 1美元。在android上运行(RecyclerView.java:407)。看法Choreographer$CallbackRecord。在android上运行(Choreographer.java:949)。看法编舞android上的doCallbacks(Choreographer.java:761)。看法编舞android上的doFrame(Choreographer.java:693)。看法Choreographer$FrameDisplayEventReceiver。在android上运行(Choreographer.java:935)。操作系统。处理程序。android上的handleCallback(Handler.java:873)。操作系统。处理程序。android上的dispatchMessage(Handler.java:99)。操作系统。活套。android上的loop(Looper.java:193)。应用程序。ActivityThread。java上的main(ActivityThread.java:6669)。朗,反思一下。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodandArgscaler。在com上运行(RuntimeInit.java:493)。Android内部的操作系统。合子岩。main(ZygoteInit.java:858)

  • 共有1个答案

    刘瑞
    2023-03-14

    使用单个列表对象并从代码中的不同位置对其进行修改不是一个好主意。您应该在CrimeAdapter中创建一个名为setCrimes(List crime)的方法,而不是在适配器的构造函数中传递列表。

    private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> {
    
        private List<Crime> mCrimes;
    
        public void setCrimes(List<Crime> crimes){
              this.crimes = crimes;
              notifyDataSetChanged();
        }  
    
        @Override
        public int getItemCount() {
          return mCrimes != null ? mCrimes.size() : 0;
        }
      }
    

    通常您需要创建列表的副本并对其进行修改,即添加、删除等,然后设置该列表。

    您可以使用ViewModel和LiveData在片段之间共享数据。

    https://developer.android.com/reference/android/arch/lifecycle/ViewModel https://developer.android.com/topic/libraries/architecture/livedata

     类似资料:
    • 需要帮助在视图寻呼机中的片段之间传递数据!我们尝试将数据作为包传递到片段中。碎片内部。方法,并尝试从另一个片段获取数据。getArguments()。 活动代码 片段代码: 在片段之间传递数据时需要帮助

    • 我的应用程序中有一个viewpager,它有7个片段,每个片段代表各自的逻辑 但是,有两个片段是相互耦合的,一个片段不能没有另一个片段而存在。 我有两个按钮,在屏幕底部的“上一个”和“下一个”,在片段之间切换。 我想使viewpager中的滑动无法到达其中一个耦合片段 现在我这样做:我把第一个片段(耦合的片段)放在位置0,第二个片段放在最后一个位置,这样当你左右滑动时,你就可以最后到达第二个耦合的

    • 我想将数据从回收视图传递到另一个片段中,第一个适配器用于显示项目,第二个适配器用于篮子片段,希望将选定的项目放入。 我要从中获取数据的适配器 这是我要将数据放入的篮子片段的适配器 现在,我可以用来在它们之间传递数据。

    • 我的主要活动有一个带有3个片段的viewpager。在fragment1中,我有一个recyclerview,其中显示了一些信息。回到我的主要活动,我有一个搜索视图,我的问题是如何将信息从主要活动传递到片段1,以便根据用户在搜索视图中的内容更新我的recyclerview。 我已经有了searchview和带有onQueryTextSubmit和onQueryTextChange方法的监听器,可以

    • 你好 我已经做了很长时间的编程,但刚刚开始为android开发,至少可以说它和c有很大的不同。。。 无论如何,我正在尝试实现一个带有一些选项卡的gui,它应该能够在向左/向右滑动时更改选项卡。这些选项卡是通过actionbar(确切地说是ActionBarSherlock)实现的,即使用支持库中的ViewPager进行滑动。单个选项卡是片段(SherlockFragment:s)。在底部应该有某种

    • 我有两个活动,在活动1中有碎片,在活动2中有碎片 fragment1和fragment2扩展自FragmentActivity1,activity2扩展自AppCompatActivity 我想将字符串值从fragment1发送到fragment2,而不获取空值。我希望你能理解这个问题。谢谢