android - 滚动ListView后,ListView View 底部的按钮收不到事件

标签 android android-emulator android-widget

我有一个 ListView ,每一行都包含一个复选框和文本。我已经成功地向 ListView 的页脚添加了一个“回答”按钮,该按钮接收事件并显示一条 toast 消息,说您单击了保存按钮。问题是如果 ListView 是可滚动的并且我上下滚动 ListView 几次,则底部的“应答”按钮不再处于 Activity 状态(至少在模拟器中)。行为似乎是按钮根本不响应任何事件。但是,选中/取消选中 ListView 项中的复选框将导致触发 Answer 按钮的 setOnClickListener 事件。

View footer = View.inflate(this,R.layout.footer, null);
getListView().addFooterView(footer,null, true); 
Button btnAnswer = (Button)footer.findViewById(R.id.btnAnswer);

btnAnswer.setOnClickListener(new OnClickListener() 
{
public void onClick(View v) 
{
Toast.makeText(getApplicationContext()," You clicked Save button", Toast.LENGTH_SHORT).show();
}
});

最佳答案

ListViews 为每个列表项“重新使用” subview 以节省内存消耗、时间等,而不是为每个项目重新创建新 View 。您正在设置 OnClickListener;但是,当您滚动页脚时, View 将重新用于另一个列表项,因此 OnClickListener 无效。

您需要扩展您的 ListAdapter 并覆盖 getView 方法,您将在其中检查页脚 View 并设置适当的监听器(如果是)。

类似于:

setListAdapter(new ArrayAdapter<string>(this, R.layout.list_item, strings) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Unless you want to set each child views individually, call
        // the super
        convertView = super.getView(position, convertView, parent);

        // Check if it's the footer view
        if(position == this.getCount() - 1) {
            // Set the listener here
        }

        return convertView;
    }
});

关于android - 滚动ListView后,ListView View 底部的按钮收不到事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968998/

相关文章:

android - 如何在 Xamarin iOS/Android 中使用 Azure 媒体服务

android - 在 AMD 处理器上运行 Android Studio 模拟器

java - Android框架修改后的不匹配Dep签名

android - 我们如何使表格布局双向滚动(水平,垂直)

Android SurfaceView 宽度/高度

android - 如何在推特上分享图片?

android - 我在多处使用 AsyncTask 进行闪屏和数据库加载。这是一个好主意吗?

android - 谷歌地图错误, "Failed to find provider info for com.google.android.gsf.gservices"和 "Failed to find provider info for com.google.settings"

android - 使用另一个按钮或控件调用微调器的 onClickListener

android - 无法在 HTC HERO 中删除超过 200 个联系人