Android 微调器和编辑文本
Android spinner and editText
我的想法是有一个文本字段,我可以在其中手动输入名称。
此外,我还有一份名单。如果该列表中至少有 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 处的项目。因此,即使用户实际上没有做任何事情,第一个项目也会被选中。您可以通过在 onItemSelected() 中设置断点(或其他一些通知)并看到它在启动时触发而无需用户执行任何操作来看到这种情况。
要触发 onNothingSelected() 回调,无论选择什么项目都必须消失。
我的想法是有一个文本字段,我可以在其中手动输入名称。
此外,我还有一份名单。如果该列表中至少有 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 处的项目。因此,即使用户实际上没有做任何事情,第一个项目也会被选中。您可以通过在 onItemSelected() 中设置断点(或其他一些通知)并看到它在启动时触发而无需用户执行任何操作来看到这种情况。
要触发 onNothingSelected() 回调,无论选择什么项目都必须消失。