1

我有一个包含 20-25 个相似行的 XML 布局,用于设置不同的参数。这些行包含一个AutoCompleteTextView和一个ImageButton。每当在这些视图之一中设置选项时,都会调用一个方法来设置我的代码中的变量,然后刷新所有视图。可以通过三种方式设置每个变量... AutoCompleteTextView:OnKeyListener, OnItemSelectedListener.... ImageButton:OnClickListener

以下是其中一行的这一部分的示例:

pumpCountAutoText = new AutoCompleteTextView( this );
pumpCountAutoText.setHint( R.string.anti_pump_pump_count_hint );
pumpCountAutoText.setTextSize( 12.0f );
pumpCountAutoText.setLayoutParams( editLP );
pumpCountAutoText.setThreshold( 1 );
pumpCountAutoText.setId( 11001 );
pumpCountAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, pumpCountList);
pumpCountAutoText.setAdapter( pumpCountAdapter );
pumpCountAutoText.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // if keydown and "enter" is pressed
        if ((event.getAction() == KeyEvent.ACTION_DOWN)
            && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                String item = pumpCountAutoText.getText().toString();
                hideSoftKeyboard( MoreParameters.this );
                pumpCountAutoText.dismissDropDown();
                if( hasRead ) {
                    if(pumpCountList.contains( item ) ) {
                         if( !( item.equals( " " ) ) ) {
                                int val = Integer.parseInt( item );
                                //Log.i( "pumpCountSpinner", Integer.toString( val ) );
                                RelayAPIModel.NativeCalls.SetParmJava( RelayAPIModel.PARM_PUMPCOUNT, val );
                            }
                        }
                    }
                    return true;
                }
                return false;
            }
         });
        pumpCountAutoText.setOnItemClickListener( new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                hideSoftKeyboard( MoreParameters.this );
                String item = pumpCountAutoText.getText().toString();
                if( !( item.equals( " " ) ) ) {
                    int val = Integer.parseInt( item );
                    //Log.i( "pumpCountSpinner", Integer.toString( val ) );
                    RelayAPIModel.NativeCalls.SetParmJava( RelayAPIModel.PARM_PUMPCOUNT, val );
                }
            }

        });


        pumpCountDropdownButton = new ImageButton( this );
        pumpCountDropdownButton.setLayoutParams( dropLP );
        pumpCountDropdownButton.setId( 11002 );
        pumpCountDropdownButton.setImageResource( R.drawable.arrow_down_float );
        pumpCountDropdownButton.setOnClickListener( new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                AlertDialog.Builder ab=new AlertDialog.Builder(MoreParameters.this);
                ab.setTitle( R.string.anti_pump_pump_count_hint );
                ab.setItems( pumpCountList.toArray( new String[pumpCountList.size()]), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int pos ) {
                        String item = pumpCountList.get( pos );
                        if( !( item.equals( " " ) ) ) {
                            int val = Integer.parseInt( item );
                            RelayAPIModel.NativeCalls.SetParmJava( RelayAPIModel.PARM_PUMPCOUNT, val );
                        }
                    }
                });
                ab.show();
            }

        });

我的问题是,在设置任何这些项目后,屏幕顶部的文本字段会自动获得焦点并显示该视图的下拉菜单。这非常烦人。我想在任何视图中选择一个项目并且不显示这些下拉菜单。

我尝试了两件事:

1) 我添加了 AutoCompleteTextView.setCursorVisible(false);

2)我也试过这个:

specialCTAutoText.setFocusable( false );
specialCTAutoText.setFocusableInTouchMode( false );
specialCTAutoText.setText( temp );
specialCTAutoText.setFocusable( true );
specialCTAutoText.setFocusableInTouchMode( true );

当我的所有视图都在此处未显示的第二种方法中刷新时,我尝试的第二件事被调用。这工作正常。但是,一旦我编辑了这三种方式之一的文本视图,它仍然会自动选择顶部的编辑文本视图。

我希望这足够清楚,但需要任何澄清让我知道。

4

1 回答 1

2

但是,一旦我编辑了这三种方式之一的文本视图,它仍然会自动选择顶部的编辑文本视图。

requestFocus()当您“以这三种方式之一编辑文本视图”时,请尝试在某个时间点调用其他小部件。

于 2013-02-18T15:10:39.607 回答