使用从ListView
继承的自定义列表视图继承BaseAdapter
。我正在尝试实现一种表格样式,其中每一行都可以水平滚动。因此,我使用HorizontalScrollView
和LinearLayout
来构造每一行。在每一行中,有多个TextView
,每个都有硬编码的文本。一切都在代码中发生,没有xml和布局文件。我遇到的问题是我没有看到我添加到TextView
的任何LinearLayout
项。这些TextView
作为子视图添加到LinearLayout
和onLayout
方法中,用于设置其布局:
int dx = 0, viewWidth = 180;
for (int i = 0; i < m_Views.length; i++) {
TextView view = m_Views[i];
int textViewWidth = viewWidth;
if (i == 0) {
textViewWidth *= 2;
}
view.layout(dx, 0, dx + textViewWidth, contentHeight);
dx += textViewWidth;
}
m_HorizontalScrollView.layout(0, 0, contentWidth, contentHeight);
m_LinearLayout.layout(0, 0, dx, contentHeight);
该代码不会呈现TextView
个元素。另外,如果我在设置视图的布局之前尝试添加以下行:
view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
该应用因LinearLayout.java
班java.lang.NullPointerException: Attempt to read from null array
中的以下错误而崩溃。
我很想知道:
layout
方法而改变?measure
方法,应用程序为什么会崩溃? PS:使用RecyclerView
或更改主题和列表视图所需的任何其他方法都超出了范围,因为这需要更改框架和基类。
答案 0 :(得分:0)
您不应该在视图上调用layout
或measure
方向。相反,您应该使用LayoutParams
设置视图的View.setLayoutParams()
。由于您使用的是LinearLayout,因此您将使用LinearLayout.LayoutParams
作为具体实现。删除对layout
和measure
的所有直接通话,让Android布局系统处理此问题。