Java 是否使用1个微调器使用if函数和notifyDataSetChanged动态更改2个微调器?
一般来说,对Java来说是相当陌生的。我的代码中有3个微调器,我的2个微调器将根据1个主微调器(有2个选择)显示列表。读了几篇文章后,我读到了关于使用notifySetDataChanged()刷新列表的内容;但微调器列表从未改变。几个问题:Java 是否使用1个微调器使用if函数和notifyDataSetChanged动态更改2个微调器?,java,android,if-statement,notifydatasetchanged,Java,Android,If Statement,Notifydatasetchanged,一般来说,对Java来说是相当陌生的。我的代码中有3个微调器,我的2个微调器将根据1个主微调器(有2个选择)显示列表。读了几篇文章后,我读到了关于使用notifySetDataChanged()刷新列表的内容;但微调器列表从未改变。几个问题: 我是否正确使用notifySetDataChanged 是否有其他方法填充列表 IF函数是合适的方法吗 下面是onCreate方法的代码 public class MainActivity extends Activity { private Spi
- 我是否正确使用notifySetDataChanged
- 是否有其他方法填充列表
- IF函数是合适的方法吗
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,
android.R.layout.simple_spinner_dropdown_item, list4);
dataAdapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner4.setAdapter(dataAdapter4);
//adapter for "from" currency
ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list1);
dataAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(dataAdapter1);
//adapter for "to" currency
ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list2);
dataAdapter2.setDropDownViewResource(android.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();
}`
公共类MainActivity扩展活动{
专用喷丝头1、喷丝头2、喷丝头3、喷丝头4;
私人按钮;
私人编辑文本来自;
private List list1=new ArrayList();
private List list2=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
from=(EditText)findViewById(R.id.amount);
//单元旋转器
喷丝头1=(喷丝头)findViewById(R.id.spinner1);
喷丝头2=(喷丝头)findViewById(R.id.spinner2);
喷丝头4=(喷丝头)findViewById(R.id.spinner4_main);
Listlist4=新的ArrayList();
清单4.添加(“距离”);
清单4.添加(“重量”);
//主秤适配器
ArrayAdapter dataAdapter4=新的ArrayAdapter(此,
android.R.layout.simple_微调器_下拉列表_项,列表4);
dataAdapter4.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头4.设置适配器(数据适配器4);
//“from”货币的适配器
ArrayAdapter dataAdapter1=新的ArrayAdapter(此,
android.R.layout.simple_微调器_项,列表1);
dataAdapter1.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头1.设置适配器(数据适配器1);
//“到”货币的适配器
ArrayAdapter dataAdapter2=新的ArrayAdapter(此,
android.R.layout.simple_微调器_项,列表2);
dataAdapter2.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头2.设置适配器(数据适配器2);
对象选择=spinner4.getSelectedItemPosition();
如果(选择等于(“重量”)){
//换算单位
dataAdapter1.clear();
数据适配器1.添加(“毫克”);
数据适配器1.添加(“克”);
数据适配器1.添加(“千克”);
数据适配器1.添加(“公吨”);
//要转换为的单位
dataAdapter2.clear();
数据适配器2.添加(“毫克”);
数据适配器2.添加(“克”);
数据适配器2.添加(“千克”);
数据适配器2.添加(“公吨”);
}
else/(spinner4.getSelectedItem().toString().equals(“距离”))
{
//喷丝头1=(喷丝头)findViewById(R.id.spinner1);
dataAdapter1.clear();
数据适配器1.添加(“毫米”);
数据适配器1.添加(“厘米”);
数据适配器1.添加(“仪表”);
数据适配器1.添加(“公里”);
dataAdapter2.clear();
数据适配器2.添加(“毫米”);
数据适配器2.添加(“厘米”);
数据适配器2.添加(“仪表”);
数据适配器2.添加(“公里”);
}
dataAdapter1.notifyDataSetChanged();
dataAdapter2.notifyDataSetChanged();
}`
如果有人能解释问题所在,请告诉这位新手。=)
这不行。
getSelectedItemPosition()
返回一个int
(),该值与中的字符串不相等
if (choice.equals("Weight")
永远不要使用对象
类作为参考,因为Java中的任何对象都是对象
(duh!),所以你可能会将苹果和橙子(两者都是水果)进行比较。看起来你来自一种更弱类型的语言,是吗?;)
解决方案:比较位置:
if (spinnerX.getSelectedItemPosition == 0)...
另外,如果在spinner4
上选择了某项内容,是否确实要更改spinner1
的内容?您的做法是错误的。下面是您应该做的
定义微调器1、2和3
为微调器1、2、3定义阵列适配器
填充ArrayAdapter并将其定义为微调器1的适配器(spinner1.setadapter(arrayadapter1)
然后调用spinner1.setOnItemSelectedListener。在方法onItemSelected中,根据需要填充逻辑以填充spinner2和spinner3的数组。然后调用spinner2.setadapter(arrayadapter2)和spinner3.setadapter(arrayadapter3)
这应该行得通
因此,最初,spinner2和spinner3将没有任何内容。即使用户单击,下拉列表中也不会有任何内容。但一旦用户选择Spinner1,spinner2和spinner3将有下拉值
请阅读setOnItemSelectedListener。有很多教程可供选择。您可以参考开始
如果这对您有效,请接受我的回答。有没有更好的方法来更改spinner1的内容?或者我做错了什么
if (spinnerX.getSelectedItemPosition == 0)...