Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 布局和子类_Java_Android_Android Linearlayout_Subclass - Fatal编程技术网

Java 布局和子类

Java 布局和子类,java,android,android-linearlayout,subclass,Java,Android,Android Linearlayout,Subclass,(我不熟悉Android和Java,所以请原谅任何不正确的措辞和术语。我尽我所能理解) 我创建了一个名为game\u activity.xml的布局。然后在classGame中,在onCreate中,我将内容视图设置为Game\u activity: public class Game extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.

(我不熟悉Android和Java,所以请原谅任何不正确的措辞和术语。我尽我所能理解)

我创建了一个名为
game\u activity.xml
布局。然后在class
Game
中,在
onCreate
中,我将内容视图设置为
Game\u activity

public class Game extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.game_activity);
    }

     //...code
     //...code
}
我还创建了一个
子类
容器
,它扩展了
线性布局

private class Container extends LinearLayout {

    public Container(Context context) {
        super(context);
    }

    //...code
    //...code
}
game\u activity.xml
中,有一个名为
mainLayout
LinearLayout
。我希望
mainLayout
成为
Container
的一部分,但我不知道如何正确实现它。 我试过这样的方法:

public class Game extends Activity {

    private LinearLayout mainLayout;

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.game_activity);

            mainLayout = (LinearLayout) findViewById(R.id.mainLayout);
            mainLayout = new Container(getApplicationContext());
    }

    private class Container extends LinearLayout {

        public Container(Context context) {
            super(context);
        }

     //... code
     //... code
    }
}
但这种方法不起作用。如何使
mainloayout
成为
Container
类的一部分


提前感谢

您只需在现有的线性布局中添加线性布局即可
因此,正如您的问题所述,您需要将mainLayout LinearLayout作为容器(Linear Layout类的子类)的一部分

您可以简单地将容器布局添加到Xml文件中,然后通过编程将主布局线性布局添加到容器布局中

然后,为了访问容器类中的内部LinearLayout,您只需在添加的mainLayout对象上放置一些标记,然后通过遍历子对象并找到具有关联标记的子布局来访问容器类中的mainLayout对象


我希望这能有所帮助。

在您的
game\u activity.xml
中,您需要的不是
标记,而是
标记。您可以在
AndroidManifest.xml
中找到您的包名

然后,要在
游戏
中获取对
容器
的引用,代码如下所示:

public class Game extends Activity {

    private Container mainLayout;

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.game_activity);

            mainLayout = (Container) findViewById(R.id.mainLayout);
    }

    private static class Container extends LinearLayout {

        public Container(Context context) {
            super(context);
        }

     //... code
     //... code
    }
}
<com.YOUR_PACKAGE_NAME.Container 
    attributes...>

    <LinearLayout
        attributes...>

        <SomeRandomView
            attributes... />

    </LinearLayout>
</com.YOUR_PACKAGE_NAME.Container>
请注意,您可能应该考虑将
容器
移动到它自己的文件中。否则,您必须将其设置为
静态类。此外,当获取对xml中布局对象的引用时,您不必自己构造它们,因为Android将构造实例作为布局过程的一部分

编辑:对不起,误读了问题。要在
容器
类中设置
线性布局
,您的
游戏活动.xml应如下所示:

public class Game extends Activity {

    private Container mainLayout;

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.game_activity);

            mainLayout = (Container) findViewById(R.id.mainLayout);
    }

    private static class Container extends LinearLayout {

        public Container(Context context) {
            super(context);
        }

     //... code
     //... code
    }
}
<com.YOUR_PACKAGE_NAME.Container 
    attributes...>

    <LinearLayout
        attributes...>

        <SomeRandomView
            attributes... />

    </LinearLayout>
</com.YOUR_PACKAGE_NAME.Container>


非常感谢您的详细和具体回答。我想这正是我需要的。我现在要测试一下,看看它是否有效。在xml中,我收到以下通知:渲染期间引发的异常:com.android.layoutlib.bridge.MockView无法强制转换到android.view.ViewGroup异常详细信息记录在窗口>显示视图>错误日志中无法找到以下类:-com.example.hello\u world.Container(修复生成路径、编辑XML、创建类)你知道为什么吗?你的
容器
类是否在它自己的文件中,名为
Container.java
?我建议使用诸如AndroidStudio之类的IDE,它会尝试猜测你要添加哪个自定义类,因为键入完整的包名和路径很快会让人厌烦。如何将容器布局添加到我的xml中?