ListView标头无法按预期工作?

时间:2011-12-23 13:14:14

标签: java android listview

在我的Android应用程序中,我有一个扩展ListActivity的类,类本身就是一个列表。 (该应用程序是待办事项列表)。

我想在列表顶部添加一个静态标题(图像)将滚动列表。当我使用addHeaderView(imageView, null, false)时,会显示图像,但它不会按预期工作:它将是可点击的执行第一个列表项的操作。实际的第一个列表项执行第二个列表项的功能,依此类推。

知道为什么会这样,我该怎么做才能解决它?

以下是onCreate()函数的代码:

private ListView lv;

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

    lv = getListView();

    ImageView im = new ImageView(this);
    im.setBackgroundResource(R.drawable.android_robot);
    lv.addHeaderView(im, null, false);

    refreshList();

    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            goToTasks(String.valueOf(getListAdapter().getItem(position)));
        }
    });

    lv.setCacheColorHint(0);
    lv.setBackgroundColor(0xFFFFFFFF);

    registerForContextMenu(lv);

    int[] colors = {0x00FF9900, 0xAAFFCC00};
    lv.setDivider(new GradientDrawable(Orientation.LEFT_RIGHT, colors));
    lv.setDividerHeight(2);
}

Adapter的代码(这是refreshList()方法):

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, populateList());
setListAdapter(adapter);

注意:populateList()方法返回String的数组,其设置为Adapter,如上面的代码所示。

如果需要更多代码或屏幕截图,请在评论中提问。

提前感谢您的帮助!

修改

我刚刚找到了一个临时解决方案:只需在-1之后添加position

goToTasks(String.valueOf(getListAdapter().getItem(position)));

会起作用,但这并不能解决发生这种情况的真正原因。

3 个答案:

答案 0 :(得分:0)

尽量多次无理由地调用getListView()。只需在开头键入此ListView lv = getListView();,然后使用lv填充列表,设置侦听器并添加标题视图。

希望这有效!

答案 1 :(得分:0)

要使静态标题不可点击,请使用onItemClick

中的以下代码

如果(位置== 0){

view.setOnClickListener(空);

view.setOnLongClickListener(空);

view.setLongClickable(假);

}

答案 2 :(得分:0)

要使静态标题不可点击,您可以通过列表视图为另一个布局充气。 您可以使用以下代码:

list.addHeaderView(getLayoutInflater().inflate(R.layout.header_list, null), null, false);