kevinjqy 2014-10-20 09:17 采纳率: 0%
浏览 1370

在fragment中实例化一个布局,点击其他fragment后再点击回来报错

10-20 04:24:35.864: E/AndroidRuntime(1390): FATAL EXCEPTION: main
10-20 04:24:35.864: E/AndroidRuntime(1390): Process: com.example.navigationdrawertest, PID: 1390
10-20 04:24:35.864: E/AndroidRuntime(1390): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
10-20 04:24:35.864: E/AndroidRuntime(1390): at android.view.ViewGroup.addViewInner(ViewGroup.java:3562)
10-20 04:24:35.864: E/AndroidRuntime(1390): at android.view.ViewGroup.addView(ViewGroup.java:3415)
10-20 04:24:35.864: E/AndroidRuntime(1390): at android.view.ViewGroup.addView(ViewGroup.java:3391)
貌似是通过LayoutInflater实例化的一个布局(View)。被重复添加了两次。请给出详细一点的解决方案

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 22:29
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是因为你在Fragment中尝试添加了一个已经存在的视图到它的子视图中。为了解决这个问题,你需要确保你没有在你的Fragment中直接使用这个视图。你可以将这个视图从父视图中移除,并重新创建一个新的视图来替代它。

    以下是一个示例:

    // 在你的Fragment中
    View view = LayoutInflater.from(context).inflate(R.layout.your_layout_id, null);
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 每当点击时调用此方法
        }
    });
    
    // 将这个视图从父视图中移除
    parent.removeView(view);
    
    // 创建一个新的视图来替换这个视图
    View newView = LayoutInflater.from(context).inflate(R.layout.new_your_layout_id, null);
    newView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 每当点击新创建的视图时调用此方法
        }
    });
    
    // 添加新的视图到父视图中
    parent.addView(newView);
    

    在这个例子中,我们首先获取了一个视图,然后将其从父视图中移除。然后我们创建了一个新的视图,并将其添加回父视图。这样就解决了问题。

    评论

报告相同问题?