我突然遇到了一个奇怪的行为。我创建完全动态的视图。基本上我从 db 获取数据,它告诉我应该如何以及生成什么 ui。
我得到了控件,比如按钮、标签等等。现在我动态创建两个按钮,用这个逻辑分配一个自己的 onClick 处理程序
this.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
GenButtonClick(v);
}
});
这是直截了当的。第一个按钮的点击处理得很好。第一个控件必须在左上角通过运行时以某种方式接收焦点。但这是一个奇怪的焦点。当我单击另一个按钮时,我必须单击两次才能处理事件处理程序。当我回到第一个按钮时,我还必须单击两次。
我发现,哪条线导致了这种行为。
this.setClickable(true);
this.setFocusable(true);
this.setFocusableInTouchMode(true); // <-- this line.
出于测试目的,我重新调整了这条线。我现在有另一个问题。之后我无法获得集中控制。但我需要焦点控件的名称。我现在能做什么 ?我是否必须在 View 类型的 fragmentactivity 中创建一个属性,我将填写 onClickListener ?还是有内部机制?我当然不能使用 setFocusableInTouchMode(true),因为用户必须点击两次。requestFocus() 没有帮助,因为 onClick 处理程序是在单击按钮后处理的。在这种情况下我能做什么最好?
我现在尝试使用 OnTouchEvent 来解决这个问题。它有效。但是,我不知道这是正确的方法,还是最好的做法。为了使用简单的 onClick 处理程序来接收单击按钮的焦点并以一种方式处理 onClick 事件处理程序,是否没有更好的方法“直接”?