java - ListView header 未按预期工作?

标签 java android listview

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

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

知道这是为什么吗?我可以做些什么来解决它?

这是我的 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);
}

还有我的适配器的代码(在refreshList() 方法中):

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

注意:populateList() 方法返回一个 String 数组,它被设置为上面代码中的 Adapter

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

在此先感谢您的帮助!

编辑:

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

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

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

最佳答案

尽量不要无故多次调用getListView()。只需在开头键入此 ListView lv = getListView();,然后使用 lv 填充您的列表、设置监听器并添加标题 View 。

希望这能奏效!

关于java - ListView header 未按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8616529/

相关文章:

java - 不能使用 LocationCallback 类

java套接字和线程问题

android - 页面问题内的Phonegap垂直滚动

android - 点击时如何更改 ListView 的颜色?

android - 如何使用 Android Studio 创建具有动态项目数的列表

c# - 将 ListView 的高度固定为空白

java - 带有配置服务器的 Spring Cloud Eureka

Java Jpa @GeneratedValue 智能生成空值和非空值

android - 在 Android Studio 中加载项目时出错 : cannot load modules

asp.net - 如何从(对象发送者,ListViewItemEventArgs e)转换对象