我必须创建一个列表,其列表项有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
,因为布局实际上是LinearLayout
。 TwoLineListItem
继承自RelativeLayout
,因此我甚至无法将布局转换为层次结构中的更高级别。
所以问题是:我如何正确使用TwoLineListItem
?我必须为它创建自己的自定义布局吗?如果是这样,如果我仍然需要自己创建列表项的所有工作,那么这个组件有什么意义呢?
答案 0 :(得分:1)
如何正确使用TwoLineListItem?
TwoLineListItem
窗口小部件是两个TextViews
的外观,必须由您提供。要在TwoLineListItem
的行中使用ListView
,您需要一个行布局,其中TwoLineListItem
窗口小部件包含两个(至少)TextView
个具有特定ID的子项(android.R.id.text1
和android.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块中,它将适用于我的朋友。 .....