2015-01-15 42 views
0

我的想法是有一个文本字段,我可以手动输入名称。Android微调和编辑文本

此外我有一个名称列表。如果该列表中东1的名称存在,则应在EditText的右侧出现一个图标,以便打开Spinner进行选择。

如果没有选择项目EditText保持不变,如果一个项目已被选中EditText将拥有该项目。

到目前为止我的工作能见度 - 但我的问题是,onNothingSelected似乎根本没有被解雇。

public class MainActivity extends ActionBarActivity { 

private Spinner spinner; 
private EditText text2; 
private ImageButton button2; 
private String spinner_value = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    spinner = (Spinner)findViewById(R.id.spinner); 

    String[] str = {"","good", "dislike", "like", "hate", "moderate"}; 
    spinner.setPrompt("Set Text"); 
    ArrayAdapter<String> list = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, str); 
    spinner.setAdapter(list); 
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
            int arg2, long arg3) { 
      TextView tv = (TextView)arg1; 
      spinner_value = tv.getText().toString(); 
      if(spinner_value.length() == 0) 
      { 
       spinner_value = "Nothing"; 
      } 
      Toast.makeText(getApplicationContext(), spinner_value, Toast.LENGTH_SHORT).show(); 
      spinner = (Spinner) findViewById(R.id.spinner); 
      text2 = (EditText) findViewById(R.id.editText); 
      button2 = (ImageButton) findViewById(R.id.imageButton); 
      text2.setVisibility(View.VISIBLE); 
      button2.setVisibility(View.VISIBLE); 
      spinner.setVisibility(View.INVISIBLE); 
      String myStr = spinner.getSelectedItem().toString(); 
      text2.setText(myStr); 
      text2.requestFocus(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      Toast.makeText(getApplicationContext(), "NothingSelected", Toast.LENGTH_SHORT).show(); 
      spinner = (Spinner) findViewById(R.id.spinner); 
      text2 = (EditText) findViewById(R.id.editText); 
      button2 = (ImageButton) findViewById(R.id.imageButton); 
      text2.setVisibility(View.VISIBLE); 
      button2.setVisibility(View.VISIBLE); 
      spinner.setVisibility(View.INVISIBLE); 
      text2.requestFocus(); 
     } 
    }); 
    } 
} 

回答

0

默认情况下,创建微调控制器时会选择索引0处的项目。因此,即使用户实际上没有做任何事情,也会选择第一项。您可以通过在onItemSelected()中设置断点(或其他通知)并在启动时看到它在没有用户执行任何操作的情况下触发,从而看到这种情况。

对于onNothingSelected()回调触发,无论选择哪个项目都必须消失。

+0

在哪种情况下会被触发?如果我打开微调,并不通过点击其他地方选择任何东西,我不是那么那么呢? – Kev

+0

否。当您打开微调器时,第一项已被选中。为了触发onNothingSelected(),当前选择的项目必须变为不可用。例如,视图设置为“已完成”。 – iheanyi

+0

好了,现在我明白了。谢谢 – Kev