【问题标题】:Dynamically Add View To Fragment Outside OnCreateView Call在 OnCreateView 调用之外将视图动态添加到片段
【发布时间】:2015-04-23 17:17:45
【问题描述】:

我查看了大约 12 个 SO 帖子,并阅读了有关活动和片段的文档。

认为是一个非常普遍的问题,但也许我错过了一些基本的东西。

我有一个片段。这个片段是从 Java 而不是 XML 创建它的视图。在运行时,我想向它添加图像。我已经尝试将视图添加到 viewgroupd,创建一个 LinearLayout 并将其添加到视图中,以及其他一些东西,但它们都不起作用。我经常崩溃(没有错误日志:?()。

这是我尝试过的最好的代码:

iImage image = new iImage(getActivity());
image.setImageResource(R.drawable.image);
LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
image.setLayoutParams(imageParams);
((ViewGroup)getFragmentManager().findFragmentById(resourceId).getView()).addView(image);

如果您能建议我如何将视图添加到片段中,我将不胜感激!

【问题讨论】:

    标签: java android android-fragments android-activity viewgroup


    【解决方案1】:

    你有一个非常普遍的问题。解决方案是为您的膨胀视图保留一个私有变量,您可以稍后使用它......无论在哪里。在此示例中,我假设您的根布局(XML 中最顶层的元素)是 LinearLayout

    public class DummyFragment extends Fragment {
    
        private LinearLayout root;
    
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            LinearLayout = (LinearLayout)  inflater.inflate(R.layout.dummy_fragment_layout, container, false);
            return root;
        }
    
    }
    

    【讨论】:

    • 但我不能动态访问它吗?为什么我必须存储它?我必须以这种方式放大视图吗?
    • 您不需要在 onCreateView 中膨胀 View... onCreateView 只是一个由活动调用的方法,用于告诉您的片段准备其初始布局。您只需要返回一个视图。在那里您可以创建一个虚拟视图组并保留对它的引用以供以后使用,然后您可以动态地向它添加视图。但由于大多数人使用 XML 进行布局,谷歌很友好地为我们提供了一个充气器
    • 好的,我想我们正在取得进展。唯一的问题是 View 看起来很抽象。我无法将视图添加到视图。它需要是什么?我正在尝试将其转换为 ViewGroup,但它不起作用。
    • 天哪 %_% 最后。非常感谢。来自 iOS,我很难习惯在 Android 上按我喜欢的方式做事。你知道如何在 iOS 上给视图添加视图吗?视图.addViewI()。 android上的所有东西都让我觉得过于复杂和臃肿......:/
    • 我在 iOS 上做了一两个项目,但有几次对该死的自动布局失去了耐心,直到我终于关闭了那个垃圾。我相信你知道我的意思:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多