android - 一次有更多 fragment 实例 - 资源引用 android 中的错误 View

标签 android view resources instance fragment

这对我来说是一个思考。我有一个扩展 FragmentAnctivity 的 MainActiviy。我有 1 个 FrameLayout 和下面的按钮来更改框架的内容。我通过切换显示/隐藏我之前在 OnCreate 中添加到 FrameLayout 的已创建 fragment 来实现。

我还在 1 个 fragment 中嵌套了更多 fragment (因为我有 1 个 fragment 用于 1 种类型的内容,并且在其中有 listFragment,它在 OnItemClick 之后更改为 DetailFragment ... 再次使用显示/隐藏方法)。

问题是在 2 个不同的内容中,我有 1 个 Fragment 类的 2 个不同实例,因此这 2 个实例使用 1 个相同的布局文件。尽管隐藏了第一个 fragment 并显示了第二个 fragment ,但是当我通过第二个实例更改某些 View 时,第一个实例的布局发生更改,第二个保持与以前相同。 (希望能看懂)

我想这完全是对 fragment 生命周期的管理和理解的错误,所以请有人帮我解决这个问题吗?

非常感谢:)

最佳答案

我想您可以通过实践获得 fragment 的要点。你的问题很简单。我几乎可以肯定您使用 getActivity().findViewById(...) 调用来访问您的 Fragment(或嵌套的 Fragment 中的 View )。在这种情况下,Activity 会从整个 View 层次结构中返回带有已定义 id 的第一个 View 。

解决方案非常简单 - 您只需要避免 getActivity().findViewById(...) 构造并在 onCreateView() 回调中获取所有指向 View 的链接并使用与所有 future 操作的确切链接。那么一切都会好起来的。这是一个简单的例子:

 private TextView mDummyText;

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.layout_name, container, false);
    initMembersViews(v);
    return v;
}

private void initMembersViews(View v) {
    mDummyText = (TextView) v.findViewById(R.id.fr_houses_list_text);
}

希望对您有所帮助!祝你好运!

关于android - 一次有更多 fragment 实例 - 资源引用 android 中的错误 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925668/

相关文章:

javascript - Android - 如何从标签的第一个字母开始将我的按钮标记为小型大写字母?

ios - 具有两个 View 的 SwiftUI Card Flip 动画,其中一个嵌入在 Stack 中

android - onCreate() 和 onDestroy() 不对称?

java - `Caused by: java.lang.RuntimeException: view must have a tag` 的实际含义是什么?

c++ - COM 指针和进程终止

java - Ant资源存在检查

android - 更新 Android Studio-

android - 在 Activity 之间传递值

android - 获取 View 文本(按钮)

java - Android 以编程方式添加 View 重复索引