java使用1个微调器动态更改2个带有if函数和notifyDataSetChanged的微调器?
一般来说,对Java来说都很陌生。我的代码中有3个微调器,我的2个微调器将根据1个主微调器(有2个选择)显示列表。读了几篇文章后,我读到了关于使用notifySetDataChanged()刷新列表的内容;但微调器列表从未改变。几个问题:
- 我是否正确使用notifySetDataChanged李>
- 还有其他方法填充列表吗李>
- IF函数是合适的方法吗李>
下面是onCreate方法的代码
public class MainActivity extends Activity {
private Spinner spinner1, spinner2, spinner3, spinner4;
private Button convertButton;
private EditText from;
private List <String> list1 = new ArrayList<String>();
private List <String> list2 = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
from = (EditText) findViewById(R.id.amount);
//spinners for units
spinner1 = (Spinner) findViewById(R.id.spinner1);
spinner2 = (Spinner) findViewById(R.id.spinner2);
spinner4 = (Spinner) findViewById(R.id.spinner4_main);
List<String>list4 = new ArrayList<String>();
list4.add("Distance");
list4.add("Weight");
//adapter for main scale
ArrayAdapter<String> dataAdapter4 = new ArrayAdapter <String> (this,
安卓.R.layout.simple_spinner_dropdown_item, list4);
dataAdapter4.setDropDownViewResource(安卓.R.layout.simple_spinner_dropdown_item);
spinner4.setAdapter(dataAdapter4);
//adapter for "from" currency
ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(this,
安卓.R.layout.simple_spinner_item, list1);
dataAdapter1.setDropDownViewResource(安卓.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(dataAdapter1);
//adapter for "to" currency
ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this,
安卓.R.layout.simple_spinner_item, list2);
dataAdapter2.setDropDownViewResource(安卓.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(dataAdapter2);
Object choice = spinner4.getSelectedItemPosition();
if (choice.equals("Weight")) {
//units to convert from
dataAdapter1.clear();
dataAdapter1.add("Milligrams");
dataAdapter1.add("Grams");
dataAdapter1.add("Kilograms");
dataAdapter1.add("Metric Ton");
//units to convert to
dataAdapter2.clear();
dataAdapter2.add("Milligrams");
dataAdapter2.add("Grams");
dataAdapter2.add("Kilograms");
dataAdapter2.add("Metric Ton");
}
else //(spinner4.getSelectedItem().toString().equals("Distance"))
{
//spinner1 = (Spinner) findViewById(R.id.spinner1);
dataAdapter1.clear();
dataAdapter1.add("Millimeter");
dataAdapter1.add("Centimeter");
dataAdapter1.add("Meter");
dataAdapter1.add("Kilometer");
dataAdapter2.clear();
dataAdapter2.add("Millimeter");
dataAdapter2.add("Centimeter");
dataAdapter2.add("Meter");
dataAdapter2.add("Kilometer");
}
dataAdapter1.notifyDataSetChanged();
dataAdapter2.notifyDataSetChanged();
}`
如果有人能解释出问题所在,请告诉这位新手。=)
# 1 楼答案
你走错了路。这是你应该做的
所以最初,spinner2和spinner3将没有任何内容。即使用户点击,下拉列表中也不会出现任何内容。但一旦用户选择Spinner1,spinner2和spinner3将具有下拉值
请仔细阅读SetonimSelectedListener。有很多教程。你可以参考here开始
如果这对你有效,请接受我的回答
# 2 楼答案
这行不通。
getSelectedItemPosition()
返回一个
int
(documentation),它将不等于中的String
永远不要(除非在极少数情况下)使用
Object
类作为引用,因为Java中的任何对象都将是Object
(duh!)所以你可能会把苹果和橙子(两者都是水果)进行比较。看起来你来自一种更弱类型的语言,是吗?;)解决方案:比较位置:
另外,如果在
spinner4
上选择了某个内容,您确定要更改spinner1
的内容吗