【问题标题】:Android add layout childsAndroid添加布局孩子
【发布时间】:2012-10-03 07:46:58
【问题描述】:

我正在创建自己的自定义 LinearLayout,并扩展它的类,我需要使用 addview 方法将子级添加到布局中,

我需要访问在构造函数之后设置的标签,所以我需要知道执行此类操作的最佳实践

这是我的代码:

public class MyLayout extends LinearLayout {

    public MyLayout(Context context) {
        super(context);


        MyTag tag = (MyTag) getTag();


        // Parent layout
        setOrientation(VERTICAL);
        setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));
        setBackgroundColor(tag.getBgColor());
    }

}

【问题讨论】:

  • getTag() 将始终在构造函数中返回 null。 (你不能设置它,直到构造对象)
  • 好吧,伙计们,我知道这个问题,需要另一种在布局显示上调用一次的方式或方法......我检查了 onLayout 方法,认为它被调用了多次并导致代码运行多次。 ..需要更专业的方式

标签: android android-linearlayout addchild


【解决方案1】:

我需要访问在构造函数之后设置的标签, 所以请我需要知道做类似事情的最佳实践 这个

如果您在调用构造函数之后设置标记,那么您的代码将不起作用,tag 将是null。如果您打算仅在代码中(而不是在 xml 布局中)使用自定义 LinearLayout,那么您始终可以调整构造函数以采用额外的 MyTag 对象:

// ...
public MyLayout(Context context, MyTag theTag) {
    super(context);
    MyTag tag = theTag;
//...

当然,如果您可以在调用构造函数的那一刻构建一个有效的MyTag 对象(当您实例化一个MyLayout 类型的新对象时),这将起作用。无论如何,如果您的代码如此依赖于MyTag 对象,您应该始终在MyLayout 类中有一个默认值,这样您就可以在尚未设置标签时使用它。

【讨论】:

  • 亲爱的,这就是我现在正在运行的实现,但需要一种更干净和有条理的方式,我不需要用其他业务填充构造函数..顺便说一句,如果你有一个膨胀和xml 反而会很酷
  • @Smartdog 没有其他办法。您基本上是在初始化之前尝试在构造函数中使用类的字段。 getTag 将在构造函数中返回null,因为该标记尚未设置,并且在您使用setTag 或直接在构造函数中传递它之前它将为空(就像我的回答一样)。在 xml 布局中,标签唯一可能的值是 String 对象,因此您的自定义对象将不起作用。
  • 我很清楚,这就是为什么我试图将我的代码放在另一个函数中,以便稍后在我的代码中调用 setTag() ......正如我在另一条评论中提到的,我尝试了 onLayout 方法,但它是由 android 框架定期调用的,这不是很好,如果你有另一个方法在充气之前调用一次,这对我来说将是完美的方法
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
相关资源
最近更新 更多