Java Android Spinner抓住焦点的最佳方式

Java Android Spinner抓住焦点的最佳方式,java,android,android-spinner,Java,Android,Android Spinner,首先,我对安卓系统还不太熟悉,尽管如此。所以我有一个微调器,每次我做出选择时,手机都会向上滚动到最后一个有焦点的编辑文本。这非常烦人,因此我将微调器设置为可聚焦,但出于某种原因,我必须单击微调器两次才能将其打开(第一次单击会使微调器聚焦,第二次单击会打开微调器)。因此,到目前为止,我得出的最好结论是: activitySpinner = (Spinner) findViewById(R.id.acivity_dropdown); activitySpinner.setFocusable(

首先,我对安卓系统还不太熟悉,尽管如此。所以我有一个微调器,每次我做出选择时,手机都会向上滚动到最后一个有焦点的编辑文本。这非常烦人,因此我将微调器设置为可聚焦,但出于某种原因,我必须单击微调器两次才能将其打开(第一次单击会使微调器聚焦,第二次单击会打开微调器)。因此,到目前为止,我得出的最好结论是:

activitySpinner = (Spinner) findViewById(R.id.acivity_dropdown);
    activitySpinner.setFocusable(true);
    activitySpinner.setFocusableInTouchMode(true);
    activitySpinner.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            activitySpinner.requestFocus();
            activitySpinner.performClick();
            return true;
        }
    });     
这就解决了需要两次单击的问题,但这会导致问题,因为它会在最轻微的触摸下打开微调器,即使我只想向下滚动。我是否以错误的方式看待这个问题?有没有办法使微调器可聚焦,并允许它在第一次单击时打开

我尝试过的事情: 在xml中设置焦点, 在java中设置触摸模式下的可聚焦和可聚焦, 上面的代码也可以试试

          spinner.requestFocusFromTouch();
使用
setFocusable(true)
setFocusableInTouchMode(true)
是正确的。要解决后一种方法造成的双触问题,请检查触摸处理程序中的
操作_UP
事件,并返回
false
,让事件冒泡,从而消除额外的
requestFocus()
调用:

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_UP && !v.hasFocus()) {
        v.performClick();
    }
    return false;
}

hasFocus();如果控件已经有焦点,您实际的点击应该会显示列表,而无需进行额外的工作。

我当前可以获得焦点,我只是在不必单击微调器两次即可获得焦点时遇到了问题。有没有一个倾听者,我可以把它放进去,阻止我的问题?