围绕TextView包装LinearLayout

时间:2011-11-23 00:04:44

标签: java android

我有以下代码,用XML Layout文件中的TextView填充ListView。但是,如果我尝试在TextView周围包装一个LinearLayout,它会崩溃!

代码:

setListAdapter(new ArrayAdapter<MyData>(getApplicationContext(), R.layout.articlelist, items));        
ListView lv = getListView();
lv.setTextFilterEnabled(true);

lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        MyData d = items[position];
        Bundle bundle = new Bundle();
        bundle.putString("theArticleText", d.getText());
        Intent newIntent = new Intent(getApplicationContext(), ArticleDetail.class);
        newIntent.putExtras(bundle);
        startActivityForResult(newIntent, 0);
    }
});

使用XML:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp" />

非工作XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp" />
</LinearLayout>

为什么会发生这种情况?我想要做的是在列表中的每个项目旁边添加一个图标,我是朝着正确的方向前进吗?

干杯,

麦克

2 个答案:

答案 0 :(得分:0)

如果你查看ArrayAdapter的文档,你会发现构造函数将textViewResourceId作为第二个参数,这就是为什么它不会使用第一个xml崩溃的原因。

顺便说一下,请记住TextView是一个视图,LinearLayout是一个ViewGroup。

如果您想使用自己的布局,则必须编写自定义适配器。

希望它会有所帮助!

答案 1 :(得分:0)

如果要使用更复杂的布局,则必须将用于ArrayAdapter的构造函数更改为同时采用布局ID和TextView ID以插入文本的版本。当您的布局只有一个TextView时,您可以使用其他版本,因为您只需要引用一个东西;但现在你必须告诉适配器要扩充的布局和要使用的新布局中的哪个视图。

您还需要修改布局,以便TextView具有有效的ID来引用:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" >
<TextView
  android:id="@+id/textview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:padding="10dp"
  android:textSize="16sp" />
</LinearLayout>

请注意android:id附加的TextView参数。然后在Java代码中使用此构造函数:

new ArrayAdapter<MyData>(getApplicationContext(), R.layout.articlelist, R.id.textview, items)

现在正确告诉适配器从每个项目中获取字符串数据的位置。

HTH