【问题标题】:Android - How to setup child views inside a viewgroupAndroid - 如何在视图组中设置子视图
【发布时间】:2010-08-31 12:05:45
【问题描述】:

有人可以帮助我了解我的语法/方法吗?我想在一个视图组中设置一堆不同的视图。我的代码在 addView 方法处失败。

不幸的是,我找不到使用 ViewGroup 在线课程的示例(这是我学习的方式)。

谢谢大家。

public class TileView extends ViewGroup {
private TestClass mTestClass;
    public TileView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initViews();
    }
    public TileView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initViews();    
    }
    public void initViews() {
        addView(mTestClass);        
    }
    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) 
    { 
    }
}

public class TestClass extends View{

public TestClass(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public TestClass(Context context, AttributeSet attrs) {
    super(context, attrs);
}

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

}

【问题讨论】:

  • @user432209:在 Eclipse 中使用adb logcat、DDMS 或 DDMS 透视图检查 LogCat 并查看 Java 堆栈跟踪以确定您的“代码在 addView 方法处失败”的原因。
  • 好的,这就是我得到的。还有更多,但空间有限。 08-31 14:05:45.488: ERROR/AndroidRuntime(311): FATAL EXCEPTION: main 08-31 14:05:45.488: ERROR/AndroidRuntime(311): java.lang.RuntimeException: 无法启动活动 ComponentInfo{cmllc. testproject/cmllc.testproject.test}: android.view.InflateException: Binary XML file line #6: Error inflating class cmllc.testproject.TileView 08-31 14:05:45.488: ERROR/AndroidRuntime(311): Caused by: android .view.InflateException: Binary XML file line #6: Error inflating class cmllc.testproject.TileView

标签: java android eclipse


【解决方案1】:

首先你应该检查你自己的布局xml文件。通过错误消息,第 6 行是错误的。第二个问题是您没有在视图组源代码中初始化 mTestClass 对象。如果要获取子视图,可以在视图组中使用 getChildAt(int) 方法。这是一个简单的例子,

int count = getChildCount();

for (int i = 0; i < count; i++) {
    View child = getChildAt(i);
}

而且,它是完整的源代码吗?我认为你应该在 ViewGroup 和 View 实例中实现 onMeasure 和 onLayout 方法。

【讨论】:

  • 这是一个 XML,除了从第 6 行开始: TileView 是视图组...不是视图...这是我的问题吗?
  • public void addView(View child, int index) { LayoutParams params = child.getLayoutParams(); ... } 它是 ViewGroup 中 addView(View child) 方法源的一部分。 TestClass 实例不是在您的代码中创建的。我不明白你想做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多