Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不使用任何ressource xml的情况下,将视图(按钮、标签等)添加到动态片段中_Java_Android_Android Fragments_Dynamic Ui - Fatal编程技术网

Java 在不使用任何ressource xml的情况下,将视图(按钮、标签等)添加到动态片段中

Java 在不使用任何ressource xml的情况下,将视图(按钮、标签等)添加到动态片段中,java,android,android-fragments,dynamic-ui,Java,Android,Android Fragments,Dynamic Ui,首先我想说,我想说“你好,在这里” 要求: 我应该能够创建一个客户端应用程序,从数据库中获取有关控件的元数据。此应用程序应该能够从一个视图(带有子视图,例如按钮)切换到另一个视图 状态: 我创建了一个相对庞大的开发oo模型,使用接口和子类(例如button),它们都实现了自己的特殊接口,以便正确地响应我的需求。我阅读了有关fragment、fragmentactivity和fragments的内容,我必须使用v4兼容类,所以我的活动继承了fragmentactivity并实现了一些特殊的接口。我

首先我想说,我想说“你好,在这里”

要求:

我应该能够创建一个客户端应用程序,从数据库中获取有关控件的元数据。此应用程序应该能够从一个视图(带有子视图,例如按钮)切换到另一个视图

状态:

我创建了一个相对庞大的开发oo模型,使用接口和子类(例如button),它们都实现了自己的特殊接口,以便正确地响应我的需求。我阅读了有关fragment、fragmentactivity和fragments的内容,我必须使用v4兼容类,所以我的活动继承了fragmentactivity并实现了一些特殊的接口。我现在正处在这样一个时刻,控制器类(FragmentActivity类中唯一的引用)做了很多事情,最终应该使片段可见

我也已经在一个集合中收集了这些子视图(按钮、标签、文本视图),每个运行时创建的片段现在应该“放置其子视图”到屏幕上。记住,我的自定义视图“Fragment”继承自Fragment并实现了一些特殊的东西

我的片段是在运行时创建的,所以我没有任何定义任何布局的xml

问题:

a) 我是否可以在没有xml布局的情况下工作,并在编程和运行时对片段应用任何布局?我第一次尝试使用自定义片段类中全局声明的布局没有成功,因为我想在几个状态期间调用getView(),但总是得到null。 因此,我必须问

b) 问题b(仅当a==true时)何时以及如何从getView接收正确的视图,以便以编程方式设置布局


提前谢谢。

我也遇到了同样的问题,而且我也找到了解决办法!
package com.example.test;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;


public class FragmentExample extends android.app.Fragment
{

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onViewCreated(view, savedInstanceState);

        //Set a linearLayout to add buttons
        LinearLayout linearLayout = new LinearLayout(getActivity());
        // Set the layout full width, full height
        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        linearLayout.setLayoutParams(params);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL); //or VERTICAL

        Button button = new Button(getActivity());
        //For buttons visibility, you must set the layout params in order to give some width and height: 
        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        button.setLayoutParams(params);

        Button button2 = new Button(getActivity());
                button2.setLayoutParams(params);
        //... and other views

        ViewGroup viewGroup = (ViewGroup) view;

        linearLayout.addView(button);
        linearLayout.addView(button2);

        viewGroup.addView(linearLayout);
    }
}
创建一个空白的XML布局文件,如下所示

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
</FrameLayout>
之后,在onViewCreated()方法中,您可以动态创建布局

  @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);

// This will create the LinearLayout
LinearLayout ll = new LinearLayout(mContext);
ll.setOrientation(LinearLayout.VERTICAL);

// Configuring the width and height of the linear layout.
LinearLayout.LayoutParams llLP = new LinearLayout.LayoutParams(
        //android:layout_width="match_parent" an in xml
        LinearLayout.LayoutParams.MATCH_PARENT,
        //android:layout_height="wrap_content"
        LinearLayout.LayoutParams.MATCH_PARENT);
ll.setLayoutParams(llLP);

TextView tv = new TextView(mContext);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);

tv.setLayoutParams(lp);
//android:text="@string/c4r"
tv.setText("Hello android !");
//android:padding="@dimen/padding_medium"
tv.setPadding(8, 8, 8, 8);
ll.addView(tv);

ViewGroup viewGroup = (ViewGroup) view;
viewGroup.addView(ll);
}

}

我也遇到了同样的问题,而且我也找到了解决办法! 创建一个空白的XML布局文件,如下所示

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
</FrameLayout>
之后,在onViewCreated()方法中,您可以动态创建布局

  @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);

// This will create the LinearLayout
LinearLayout ll = new LinearLayout(mContext);
ll.setOrientation(LinearLayout.VERTICAL);

// Configuring the width and height of the linear layout.
LinearLayout.LayoutParams llLP = new LinearLayout.LayoutParams(
        //android:layout_width="match_parent" an in xml
        LinearLayout.LayoutParams.MATCH_PARENT,
        //android:layout_height="wrap_content"
        LinearLayout.LayoutParams.MATCH_PARENT);
ll.setLayoutParams(llLP);

TextView tv = new TextView(mContext);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);

tv.setLayoutParams(lp);
//android:text="@string/c4r"
tv.setText("Hello android !");
//android:padding="@dimen/padding_medium"
tv.setPadding(8, 8, 8, 8);
ll.addView(tv);

ViewGroup viewGroup = (ViewGroup) view;
viewGroup.addView(ll);
}

}


我相信您从getView()得到的是null,因为您没有在片段的onCreateView中提供视图。请尝试返回简单的FrameLayout并将您的布局添加到其中。您的上一个问题和这个问题有什么不同?这个问题只关注片段的布局。在动态创建所有内容时,我不能使用任何xml afaik。前一个问题集中在“何时放置子元素”到片段布局中。如果你愿意的话,我已经在另一个问题之前问过这个问题。@Vang:你是什么意思?我不在onCreateView中提供视图?我该怎么做?我没有任何id需要充气机提取以返回已识别的“视图”。我相信您从getView()获得空值因为您没有在片段中的onCreateView中提供视图。请尝试返回简单的FrameLayout并将您的布局添加到其中。您的上一个问题与此问题有什么区别?此问题只关注片段的布局。在动态创建所有内容时,我不能使用任何xml afaik。前一个问题集中在“何时放置子元素”到片段布局中。如果你愿意的话,我已经在另一个问题之前问过这个问题。@Vang:你是什么意思?我不在onCreateView中提供视图?我该怎么做?我没有任何id被充气机提取以返回识别的“视图”。非常感谢,按钮被添加。。。但我看不到。顺便说一下,我的片段中没有任何布局。。。。。如何在实例化过程中添加一个?让我明天尝试一下,然后我会做出反应,我仍然无法让它工作。我没有看到我的片段。我注意到,onViewCreated是由于主活动(片段活动)的setContentView而被调用的。在onViewCreated中,我向片段和带有布局的按钮添加了布局。我还在onViewCreated中设置了蓝色bgcolor。在调用onViewCreated之前,我完全删除fragmentmanager的backbackback,只插入对实例化片段的引用。我想知道,顺序不对。所以我转到了onCreate of main activity,并尝试实例化一个没有xml布局的frgament。有人举个例子吗?没有,我做了,不再需要了。但我还有其他问题。片段布局是绝对类型的(我将使用绝对,不需要对弃用进行注释)。我使用新的LayoutParams创建它。调用onViewCreated时,实际上没有发生任何事情。没有创建按钮,没有更改背景颜色,我无法更改片段的大小。。。。假设,我太迟了,我肯定必须通知fragmentactivity重新绘制自己。也许我也应该给我们另一个碎片活动的事件处理程序。作品但必须强制重画,在添加到片段管理器后,我立即通过分离和附加完成了重画。想知道是否可以做其他。非常感谢,按钮被添加。。。但我看不到。顺便说一下,我的片段中没有任何布局。。。。。如何在实例化过程中添加一个?让我明天尝试一下,然后我会做出反应,我仍然无法让它工作。我没有看到我的片段。我注意到,onViewCreated是由于主活动(片段活动)的setContentView而被调用的。在onViewCreated中,我向片段和带有布局的按钮添加了布局。我还在onViewCreated中设置了蓝色bgcolor。在调用onViewCreated之前,我完全删除fragmentmanager的backbackback,只插入对实例化片段的引用。我想知道,顺序不对。所以我转到了onCreate of main activity,并尝试实例化一个没有xml布局的frgament。有人举个例子吗?没有,是我做的,没有