0

我必须创建一个列表,其列表项有 2 行文本。我开始构建一个自定义列表项,但后来我发现了该TwoLineListItem组件。我写了这段代码:

pageFilterResultView=new TwoLineListItem(containerActivity);
pageFilterResultView.getText1().setText("Test");

但是,getText1返回 null,并且第二行抛出一个NullPointerException. 所以我认为我需要使用膨胀布局而不是构造函数。TwoLineListItem文档指定我可以将android.R.layout.two_line_list_item资源用于布局,因此我将代码更改为:

LayoutInflater inflater=(LayoutInflater)containerActivity.
        getSystemService(Context.LAYOUT_INFLATER_SERVICE);
pageFilterResultView=(TwoLineListItem)inflater.inflate(android.R.
        layout.two_line_list_item,null);
pageFilterResultView.getText1().setText("Test");

但是,这会抛出 a ,ClassCastException因为布局实际上是 a LinearLayoutTwoLineListItem继承自RelativeLayout,因此我什至无法将布局转换为层次结构中的更高级别。

那么问题来了:如何TwoLineListItem正确使用?我必须为它创建自己的自定义布局吗?如果是这样,如果我仍然必须自己完成创建列表项的所有工作,那么这个组件的意义何在?

4

2 回答 2

1

如何正确使用 TwoLineListItem?

该小部件是您必须提供的TwoLineListItem两个以上的外观。TextViews要使用TwoLineListItemin aListView的行,您需要一个行布局,其中您的TwoLineListItem小部件具有两个(至少)TextView具有特定 id(android.R.id.text1android.R.id.text2)的子级。像这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@android:id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:layout_below="@android:id/text1"/>

</TwoLineListItem>

然后你可以getView()像你一样在方法中使用它:

pageFilterResultView=(TwoLineListItem)inflater.inflate(R.layout.the_layout_file_above,null);
pageFilterResultView.getText1().setText("Test");

当然,您可以使用包含的布局文件作为子项TwoLineListItem(只要您有两个TextViews具有所需 id 的文件):

<?xml version="1.0" encoding="utf-8"?>
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <!-- the android version of the two line layout -->
    <include layout="@android:layout/two_line_list_item" />

</TwoLineListItem>

但这只会增加布局深度,应该避免。

如果是这样,如果我仍然必须自己完成创建列表项的所有工作,那么这个组件的意义何在?

从您不能以编程方式使用这个小部件的事实来看,我也没有看到对这个组件的需求。

于 2012-10-05T13:46:45.137 回答
-1

将您的布​​局代码放入带有 ClassCastException 的 try catch 块中,它会正常工作我的朋友。......

于 2012-10-05T13:07:26.063 回答