覆盖getView()的问题

时间:2011-05-08 14:18:23

标签: java android listview

覆盖我的getview方法时,我一直收到错误消息。这就是我所拥有的:

公共类UnwatchedEpisodesActivity扩展了ListActivity {

private String[] values = new String[]{"Row 1", "Row 2", "Row 3"};

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.episode_main);
    setListAdapter(new EpisodeListAdapter());

}

private class EpisodeListAdapter extends ArrayAdapter<String>{

    private LayoutInflater li = LayoutInflater.from(this.getContext());

    public EpisodeListAdapter(){
        super(UnwatchedEpisodesActivity.this, 0, values);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null){
            convertView = li.inflate(R.layout.episode_row, parent, false);
        }

        ((TextView) convertView.findViewById(R.id.text1)).setText(values[position]);
        return convertView;
    }

}

我的xml是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/ep_layout"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:id="@android:id/text1" />
</LinearLayout>

(我也试过没有线性布局,没有区别) 我得到this error.

你们有什么想法吗?

另一个问题: 如果我想分组中的值,我该怎么办?我想要一个列表来显示如下内容:

-----------
first part
-----------
Row 1
Row 2
-----------
second part
-----------
Row 3

显然这只是一个例子;基本上我想知道如何添加这些'分隔符'

2 个答案:

答案 0 :(得分:2)

您应该通过

设置TextView的ID
android:id="@+id/text1"

这部分:android:id="@android:id/text1"不正确!

要分离您的商品,您应该使用ExpandableListActivity而不是ListActivity,其中您的群组将是部分(第一个,第二个等),子列表将是您当前的{{ 1}}。

在这种情况下,您应该使用values来填充视图。
虽然有一些方法需要覆盖,但是使用适当的数据结构不会有问题。例如,您可以参考this example

然后,BaseExpandableListAdapter方法的正文应放在getView的{​​{1}}方法中,您应该使用其他BaseExpandableListAdapter甚至更复杂的布局getChildView中的部分覆盖。

通过这种方式,您可以将剧集分成几部分。

答案 1 :(得分:1)

使用android:id="@+id/text1"代替 第一部分 android:id =“@ android:id / text1”

关于第二个问题,就我对你的需求的理解而言:

你应该为getView()方法中的不同位置充气不同的xml。 例如:

if (position == 0) {
    convertView = li.inflate(R.layout.episode_row, parent, false);
    //fetch the text view and other things and set their value
    return convertView;
} else if (position == 1) {
    //similarly do here also and return convertview
}

希望这有助于解决您的问题。