我有一个 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/