我对Android很陌生,我试图弄清楚片段和活动应该如何协同工作。我有一个非常丑陋的布局。1个活性和1个“根”片段。当用户单击左侧菜单时,片段被片段管理器替换。
expandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
LeftMenuItem group = groups.get(i);
String fragmentTag = group.getFragmentTag();
if (fragmentTag.equals(Fragment1.TAG)) {
Fragment1 fragment = (Fragment1) currentFragmentManager.findFragmentByTag(Fragment1.TAG);
if (fragment == null) {
fragment = new Fragment1();
}
FragmentTransaction ft = currentFragmentManager.beginTransaction();
ft.replace(R.id.root_frame, fragment, Fragment1.TAG);
ft.commitAllowingStateLoss();
} else if (fragmentTag.equals(Fragment2.TAG)) {
我假设上面的代码应该用新的片段替换当前片段。片段实际上总是空的。我不知道为什么。
在onCreateView的RootFrament Fragment1是默认创建的。
if (savedInstanceState == null) {
Log.d(TAG, "savedInstanceState is null, creating Framgent1");
Fragment1 fragment = new Fragment1();
FragmentTransaction ft = currentFragmentManager.beginTransaction();
ft.replace(R.id.root_frame, fragment, Fragment1.TAG);
ft.commitAllowingStateLoss();
}
在rootFragment的onCreateView中,rootFragment用另一个Fragment1替换了自己,这在我看来非常难看。它是众所周知的Android图案还是糟糕的设计?
让我们假设我使用Volley从MyActive的onCreateView发送httpRequest。收到响应后,我需要从回调更新Fragment1 UI。我怎么做?
>
我是否应该尝试在活动中使用findFragmentByTag查找片段并直接更新UI?http截击响应是否在同一线程中?如果没有,可以从不同的线程更新UI吗?
我应该使用处理程序类将消息从活动发送到片段吗?
findFragmentByTag将不再有用,因为一旦调用replace,就会销毁之前的片段。如果您只需要切换几个片段,可以使用以下解决方案:
如何在两个片段之间切换,而不每次都重新创建片段?
对问题1第二部分的答复:
Volley响应总是在主线程上调用,以便在回调时更新UI。您永远不应该在除MAIN/UI线程之外的任何线程上更新UI元素。
您可以选择通过处理程序发送消息,但如果通常android留档建议通过回调在活动和附加片段之间发送通信
https://developer.android.com/training/basics/fragments/communicating.html
问题内容: 我要在我的下一个Android项目中使用Retrofit 2.1.0。我想使用设计模式,因此为每个REST调用创建单独的类,即 IBalanceService.java BalanceRestClient.java BalanceActivity.java 如何通过onResponse()更新活动/片段中的UI? 附加信息: 最小SDK:19个 目标SDK:23个 使用OkHttp和g
我有一个带有一些线程的简单应用程序,我需要从一些线程更新SWING GUI(我正在使用Netbean)。 这是我需要更新的主要表单: 现在我有一些线程: 在其他班级,我有: 代码的每个部分都位于不同的文件(类)中。我如何在这里实现 Swing 工作人员,以便能够在我的主 GUI 窗体上显示文本?
我有以下方法将播放器添加到数据库或更新它,如果它已经存在: 这个方法有时由两个不同的线程调用,因此几乎同时执行两次。有时我会得到以下异常: org . H2 . JDBC . jdbcsqlintegrityconstraintviolationexception:唯一索引或主键冲突:" PUBLIC。PUBLIC上的PRIMARY_KEY_B42。玩家(ID)值3”; 这对我来说是有意义的,因为
JavaFX场景图表示JavaFX应用程序的图形用户界面,它不是线程安全的,只能从UI线程(也称为JavaFX应用程序线程)访问和修改。 https://docs.oracle.com/javase/8/javafx/get-start-tutorial/jfx-architecture.htm#A1107438 任何“实时”场景,即作为窗口一部分的场景,都必须从该线程访问。场景图可以在后台线程中
问题内容: 我托管了5个片段,在每个片段上我都需要填写一些字段。 我想从中获取这些字段的值。我尝试了类似的东西: AddActivity.java FragPagerAdapter.java OtherFragment.java 公共类OtherFragment扩展Fragment {Button btn; 更新 的问题我总是得到EditText(而其他字段要获得)的问题等于null如果它们位于片
我已经完成了导航,现在进入第一个片段。在第一个片段中有两个按钮,我需要通过按下这些按钮来切换到一个新的活动。我不明白如何正确地实施它。我犯了一个错误。 代码,eror