gpt4 book ai didi

java - fragment 是不可见的,但可以点击它的 View

转载 作者:行者123 更新时间:2023-12-04 09:00:44 25 4
gpt4 key购买 nike

我正在尝试使用户能够转到新的 Fragment单击列表项时。没关系。我创建了一个界面,允许我处理来自 FragmentA.java 类的点击事件。 Activity 开始时,FragmentA 附加到我的 Activity 。我的 Activity 扩展FragmentActivity .
在我的 Activity 课上:

@Override
protected void onCreate(Bundle savedInsantaceState){
//...
getSupportFragmentManager().beginTransaction().replace(R.id.container, FragmentA.newInstance(param1, param2)).commit();
}
然后在 FragmentA.java 中,我将它设置为我的 RecyclerView Adapter 作为点击处理程序。我使用 add() 方法而不是 replace() 方法来更改 fragment ,因为我想在附加 FragmentB 时保存 FragmentA 的状态(如 RecyclerView 位置等)。
private void setListeners(){
mAdapter.setOnItemClickListener(itemClickListener);
}

private ItemListAdapter.ItemClickListener itemClickListener = new ItemListAdapter.ItemClickListener() {
@Override
public void onItemClicked(View v, ItemModel item) {

FragmentManager manager =((FragmentActivity)mActivity).getSupportFragmentManager();

manager.beginTransaction().add(R.id.post_activity_layout_container, FragmentB.newInstance(item, param2, param3)).addToBackStack("comment").commit();

}
};
这是问题:在这种情况下,FragmentA 正在运行但不可见,而用户看到 FragmentB。用户可以访问 FragmentA 的 View ,这会导致问题。我想保存 FragmentA 的最后一个状态,但用户不应该从 FragmentB 中单击 FragmentA 的 View 。如何处理这个问题?是否有更好的做法来完成保存最后一个状态?
编辑
FragmentA 包含一些排序、过滤。当我使用 replace() 方法时,用户设置的所有过滤器都无效,并且 RecyclerView 位置也变为 0。想象用户正在查看(例如)列表中的 33. 项目,单击它,附加 FragmentB,然后转到回到 fragment A。我希望用户从 33. 项目继续,不希望用户尝试查找他所在的位置。

最佳答案

我不确定您所说的“我想保存 FragmentA 的最后一个状态”是什么意思,但是,AFAIK,您在容器中替换 Fragments 的事实并不意味着它们会丢失状态。例如,您仍然可以单击后退按钮,这将恢复事务,将前一个 Fragment 从返回堆栈中取出。
编辑:您观察到的效果很可能是由 Fragment 的 View 层次结构的破坏和重新创建引起的。有几种方法。第一个是存储 UI 状态并在 fragment 重新初始化后恢复它​​。不幸的是,RecyclerView 的位置可能很棘手(你可以用谷歌搜索)。另一种更简单的方法(这是一种 hack)是在 onCreateView 中创建 Root View 。只有一次,在 Fragment 中保留对它的引用,并在后续调用 onCreateView 时返回相同的 View .如果您决定使用后一种方法,请小心,因为您使用的 Fragments 并不完全按照预期的方式使用。
与您的问题没有直接关系,但我绝对建议避免手动 fragment 管理。会太痛苦的。您可以使用官方的导航组件,或者使用更简单的解决方案,例如 FragNav 库。我写了this post关于后者,它可能会对您有所帮助。

关于java - fragment 是不可见的,但可以点击它的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63571362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com