2011-04-26 65 views
3

我在使用s.requestFocus()時出現問題,當s是一個微調。當它是一個微調控制器時,是否有特殊的處理方式來使它工作? 感謝Android 2.2 requestFocus()和spinners

+0

問題是什麼?有任何日誌或源代碼向我們展示? – OcuS 2011-04-26 12:12:08

+0

當我爲一個微調器做view.requestFocus()時,它什麼都不做,但是如果視圖是一個EditText,它就可以正常工作。 – xain 2011-04-26 22:04:12

+0

你到底想做什麼?讓它處於選定狀態?打開微調對話框?請詳細說明 – zsniperx 2011-05-05 21:57:41

回答

0

使用本

import java.util.ArrayList; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.text.Editable; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.Toast; 

public class dynamic_spinner_main extends Activity { 

    private Spinner m_myDynamicSpinner; 
    private EditText m_addItemText; 
    private ArrayAdapter<CharSequence> m_adapterForSpinner; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_spinner); 

     /////////////////////////////////////////////////////////////// 
     //grab our UI elements so we can manipulate them (in the case of the Spinner) 
     // or add listeners to them (in the case of the buttons) 
     m_myDynamicSpinner = (Spinner)findViewById(R.id.dynamicSpinner);   
     m_addItemText = (EditText)findViewById(R.id.newSpinnerItemText); 
     Button addButton = (Button)findViewById(R.id.AddBtn); 
     Button clearButton = (Button)findViewById(R.id.ClearBtn); 

     //////////////////////////////////////////////////////////////// 
     //create an arrayAdapter an assign it to the spinner 
     m_adapterForSpinner = new ArrayAdapter(this, android.R.layout.simple_spinner_item); 
     m_adapterForSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);   
     m_myDynamicSpinner.setAdapter(m_adapterForSpinner); 
     m_adapterForSpinner.add("gr");   
     m_myDynamicSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
       // your code here 
       Intent mIntent=new Intent(dynamic_spinner_main.this,sampleLocalization.class); 
       mIntent.putExtra("lang", m_myDynamicSpinner.getItemIdAtPosition(position)); 
       System.out.println("Spinner value...."+m_myDynamicSpinner.getSelectedItem().toString()); 
       startActivity(mIntent); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parentView) { 
       // your code here 
      } 

     }); 
     //////////////////////////////////////////////////////////////// 
     //add listener for addButton 
     addButton.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) {    
       addNewSpinnerItem(); 
      }     
     }); 

     //////////////////////////////////////////////////////////////// 
     //add listener for addButton 
     clearButton.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       clearSpinnerItems(); 
      }   
     }); 
    } 

    private void addNewSpinnerItem() { 
     CharSequence textHolder = "" + m_addItemText.getText(); 
     m_adapterForSpinner.add(textHolder); 
    } 

    private void clearSpinnerItems() { 
     m_adapterForSpinner.clear(); 
     m_adapterForSpinner.add("dummy item"); 
    }  
} 

main_spinner.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <EditText android:layout_height="wrap_content" 
      android:layout_margin="4px" 
      android:id="@+id/newSpinnerItemText" 
      android:layout_width="fill_parent"></EditText> 
    <Button android:layout_height="wrap_content" 
      android:id="@+id/AddBtn" 
      android:layout_margin="4px" 
      android:layout_width="fill_parent" 
      android:text="Add To Spinner"></Button> 
    <Button android:layout_height="wrap_content" 
      android:id="@+id/ClearBtn" 
      android:layout_margin="4px" 
      android:layout_width="fill_parent" 
      android:text="Clear Spinner Items"></Button> 
    <Spinner android:layout_height="wrap_content" 
      android:id="@+id/dynamicSpinner" 
      android:layout_margin="4px" 
      android:layout_width="fill_parent"></Spinner> 
</LinearLayout> 
+1

我很抱歉,但我沒有看到與我的問題的關係。 – xain 2011-04-27 13:06:03

3

試試這個代碼..

spinner.setFocusable(true); 
spinner.setFocusableInTouchMode(true); 
1

我猜你是不是真的只是希望「把重點放在微調器上。當你將焦點放在EditText上時,鍵盤會彈出,所以你可能希望微調選擇在焦點上「打開」 - 但它不會這樣工作(不要問我爲什麼)。使用s.performClick()來做到這一點 - 它就像用戶點擊微調控件一樣。

+0

這就像一個魅力! – 2011-08-26 20:39:20

0

默認情況下,微調控件不是可以調焦的(source)。所以,你必須讓它可聚焦無論是在XML

<Spinner 
    android:id="@+id/spinner" 
    android:focusable="true" 
    android:layout_width="wrap_conten" 
    android:layout_height="wrap_content" /> 

或代碼

findViewById(R.id.spinner).setFocusable(true);