具有可滚动水平行的ListView

时间:2015-11-17 21:01:10

标签: android android-layout listview horizontal-scrolling

使用从ListView继承的自定义列表视图继承BaseAdapter。我正在尝试实现一种表格样式,其中每一行都可以水平滚动。因此,我使用HorizontalScrollViewLinearLayout来构造每一行。在每一行中,有多个TextView,每个都有硬编码的文本。一切都在代码中发生,没有xml和布局文件。我遇到的问题是我没有看到我添加到TextView的任何LinearLayout项。这些TextView作为子视图添加到LinearLayoutonLayout方法中,用于设置其布局:

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.javajava.lang.NullPointerException: Attempt to read from null array中的以下错误而崩溃。

我很想知道:

  1. 为什么文本视图的布局不会因调用layout方法而改变?
  2. 如果我调用measure方法,应用程序为什么会崩溃?
  3. PS:使用RecyclerView或更改主题和列表视图所需的任何其他方法都超出了范围,因为这需要更改框架和基类。

1 个答案:

答案 0 :(得分:0)

您不应该在视图上调用layoutmeasure方向。相反,您应该使用LayoutParams设置视图的View.setLayoutParams()。由于您使用的是LinearLayout,因此您将使用LinearLayout.LayoutParams作为具体实现。删除对layoutmeasure的所有直接通话,让Android布局系统处理此问题。