使用TwoLineListItem组件

时间:2012-10-05 12:59:40

标签: android android-layout android-listview android-view

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

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

但是,getText1返回null,第二行抛出NullPointerException。所以我认为我需要使用膨胀的布局而不是构造函数。 TwoLineListItem documentation指定我可以使用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");

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

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

2 个答案:

答案 0 :(得分:1)

  

如何正确使用TwoLineListItem?

TwoLineListItem窗口小部件是两个TextViews的外观,必须由您提供。要在TwoLineListItem的行中使用ListView,您需要一个行布局,其中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>

然后你可以像{I}一样在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>

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

  

如果是这样的话,如果我还要做所有这一点,那么这个组件有什么意义呢   我自己创建一个列表项的工作?

由于您无法以编程方式使用此小部件,我也不认为需要此组件。

答案 1 :(得分:-1)

将你的布局代码放在带有ClassCastException的try catch块中,它将适用于我的朋友。 .....