当前位置: 首页 > 面试题库 >

Android:从另一个打开片段

仲涵亮
2023-03-14
问题内容

我是Android的新手,这是我的第二个应用程序。我正在创建一个选项卡式活动,其中第一个片段具有创建新任务的形式,第二个片段具有所有已保存任务的列表,第三个片段从第二个列表中选择时将显示任务注释分段。第三个片段也应该像一个聊天活动,当您键入评论并点击发送按钮时,它会发布评论。当我从另一个地方ActivityCommentsActivity.java在下面的链接的GitHub分支中)实施此聊天活动时,该应用程序将完全按预期运行。但是,当我尝试从第三个实现相同的代码时Fragment,出现以下问题:

  • 在启动TasksFragment.java之前,我必须点按两次列表中的项目CommentsFragment

  • 该片段保持空白,不显示任何细节或注释。

  • 标题栏被弄乱了。CommentsFragment第一次启动时,确实可以正确设置标题。但是,当我在片段之间滑动时,它随后变成空白。有时,它甚至显示最后打开的片段的标题,而不是当前打开的片段的标题。

您可以在这里找到我所有的代码:https : //github.com/geekskool/android-
teamwork/tree/only_fragments

其他细节:我传递的数据TasksFragmentCommentsFragment与片段交互方法与主activity–
相互作用AddTask.java。这是我所知道的唯一方法。如果有更好的方法,请告诉我。


问题答案:

我看到了您的分支,并注意到您正在使用ViewPager并尝试使用FragmentTransaction来更新内的片段ViewPager。这并不是因为碎片将已经被中时创建工作,ViewPagerAdapter创建并不能连接到ViewPager通过FragmentTransaction

这是我解决的方法。由于我使用的是ViewPager,FragmentTransaction因此无法使用以下方法:

错误的方法:

FragmentManager fm = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
CommentsFragment commentsFragment = CommentsFragment.newInstance(mTaskId, mTaskName);
ft.replace(R.id.container, commentsFragment);
ft.addToBackStack(null);
ft.commit();

使用ViewPager,我必须更新填充它的适配器,然后将其设置为正确的片段。这就是我所做的:

正确的方法:

在TasksFragment的onListItemClick()中,调用此接口方法onFragmentInteraction。然后在主要活动AddTask中,如下实现:

@Override
public void onFragmentInteraction(String taskId, String taskName, String assigneeRef) { 
    CommentsFragment commentsFragment = CommentsFragment.newInstance(taskId, taskName);
    mSectionsPagerAdapter.fragmentList.remove(2);
    mSectionsPagerAdapter.fragmentList.add(commentsFragment);
    mSectionsPagerAdapter.notifyDataSetChanged();
    mViewPager.setCurrentItem(2);
}

希望这对您和其他在更新ViewPager中的片段时遇到问题的人有所帮助。



 类似资料:
  • 在我的中有5个片段(home、settings、newPost、notifications和profile)。 在中,我有一个,其中包含许多post视图,每个post都包含一个“open”按钮,该按钮应该打开一个。问题是,我只能在类和populateItemRows()方法中使用,所以当我不能使用... RecycerViewAdapter:

  • 我该怎么做?现在我得到一个:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法'void Android.Widget.TextView.SetText(java.lang.CharSequence)' FragmentRonde1.java 下面是片段的类,其中ListCLickedTitle为:ListClickedFragment logcat

  • 问题内容: 从Activity中包含的RecyclerView的适配器中,我试图在按下RecyclerView的元素时启动一个片段,这是我现在的代码: 我测试了它是否启动了我创建的一些“测试活动”,所以我知道除了片段启动之外的所有功能都可以正常工作。 错误在这里: 我正在启动作为活动的Fragment,所以当我运行应用程序时,它崩溃了,并告诉我在清单中将MainFragment声明为活动。 如何从

  • 我需要一些暑期项目的帮助 这是我的事件片段 这是我的MyList片段 我正在使用RecyclerViewCardView显示事件。其想法是,用户可以单击每张卡片右侧的大加号,卡片将显示在MyList片段中。我想问一下,是否可以将一张卡直接从一个片段转移到另一个片段?而且,这两个片段都包含在同一个活动中,这使得它有点棘手(我还没有找到任何可用的解决方案)。 如果不可能,另一种方法是将CardView

  • 问题内容: 我有一个JFrame和JPanel, 里面装满了 带有 动作监听器的Jsomethings 。当用户单击一个对象时,我想打开另一个JFrame。这是我所做的: (RejectApp调用一个新的JFrame。)因此,另一个JFrame在屏幕上打开,带有更多选项。它可以正常工作(到目前为止),但是我想知道这个标准吗?我的意思是这样调用main方法?另一个问题是,不使用cardlayout(

  • 这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.