Java 根据不同微调器的位置更改微调器列表

Java 根据不同微调器的位置更改微调器列表,java,android,drop-down-menu,spinner,adapter,Java,Android,Drop Down Menu,Spinner,Adapter,在我的项目中,我有一个微调器来选择单位类型(长度、质量等),然后有两个微调器,我想根据用户的选择进行更改。因此,如果用户从第一个微调器中选择质量作为其单位,则第二个和第三个微调器应更改显示克、磅等的列表 我试图使用conversionAdapter的onItemSelectedListener()来切换其他两个微调器显示的列表。我的任何尝试都没有成功,因为这个内部类无法访问主活动中的微调器 public class MainActivity extends AppCompatActivity {

在我的项目中,我有一个微调器来选择单位类型(长度、质量等),然后有两个微调器,我想根据用户的选择进行更改。因此,如果用户从第一个微调器中选择质量作为其单位,则第二个和第三个微调器应更改显示克、磅等的列表

我试图使用conversionAdapter的onItemSelectedListener()来切换其他两个微调器显示的列表。我的任何尝试都没有成功,因为这个内部类无法访问主活动中的微调器

public class MainActivity extends AppCompatActivity {

private ImageView equalSign;
private Spinner conversionSpinner, unitOneSpinner, unitTwoSpinner;
private EditText unitOneEditText, unitTwoEditText;
private List selectedList;

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

    equalSign = (ImageView)findViewById(R.id.equal_sign);
    equalSign.setImageResource(R.drawable.equal_sign_black_2);

    unitOneEditText = (EditText)findViewById(R.id.unit_one);
    unitTwoEditText = (EditText)findViewById(R.id.unit_two);

    conversionSpinner = (Spinner)findViewById(R.id.conversion_spinner);

    String[] conversion_list = {"Length", "Mass", "Time", "Temperature", "Volume"};
    String[] length_list = {"Kilometer", "Meter", "Centimeter", "Millimeter", "Micrometer", "Nanometer", "Mile", "Yard", "Inch"};
    String[] mass_list = {"Metric Ton", "Kilogram", "Gram", "Milligram", "Microgram", "Pound", "Ounce"};
    String[] time_list = {"Nanosecond", "Microsecond", "Millisecond", "Second", "Minute", "Hour", "Day", "Year", "Decade", "Century"};
    String[] temp_list = {"Fahrenheit", "Celsius", "Kelvin"};
    String[] volume_list = {"US Liquid Gallon", "US Liquid Quart", "US Liquid Pint", "US Legal Cup", "US Fluid Ounce", "US Tablespoon", "US Teaspoon", "Liter", "Milliliter"};

    List<String>conversion_types = new ArrayList<String>();
    List<String>length = new ArrayList<String>();
    List<String>mass = new ArrayList<String>();
    List<String>time = new ArrayList<String>();
    List<String>temp = new ArrayList<String>();
    List<String>volume = new ArrayList<String>();

    conversion_types = updateList(conversion_types, conversion_list);
    length = updateList(length, length_list);
    mass = updateList(mass, mass_list);
    time = updateList(time, time_list);
    temp = updateList(temp, temp_list);
    volume = updateList(volume, volume_list);

    selectedList = length;

    ArrayAdapter<String> conversionAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_dropdown_item, conversion_types);
    conversionSpinner.setAdapter(conversionAdapter);
    conversionSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String unitType = (String)parent.getItemAtPosition(position);
            switch(unitType){
                case "length":
                    Toast.makeText(getApplicationContext(), "Length", Toast.LENGTH_SHORT).show();
                    break;
                case "Mass":
                    Toast.makeText(getApplicationContext(), "Mass", Toast.LENGTH_SHORT).show();
                    break;
                case "Time":
                    Toast.makeText(getApplicationContext(), "Time", Toast.LENGTH_SHORT).show();
                    break;
                case "Temperature":
                    Toast.makeText(getApplicationContext(), "Temperature", Toast.LENGTH_SHORT).show();
                    break;
                case "Volume":
                    Toast.makeText(getApplicationContext(), "Volume", Toast.LENGTH_SHORT).show();
                    break;
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    unitOneSpinner = (Spinner)findViewById(R.id.unit_one_spinner);
    ArrayAdapter<String> unitOneAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_dropdown_item, selectedList);
    unitOneSpinner.setAdapter(unitOneAdapter);
    unitOneSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    unitTwoSpinner = (Spinner)findViewById(R.id.unit_two_spinner);
    ArrayAdapter<String> unitTwoAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_dropdown_item, selectedList);
    unitTwoSpinner.setAdapter(unitTwoAdapter);
    unitTwoSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    unitOneAdapter.clear();
    unitOneAdapter = updateList(unitOneAdapter, mass_list);
    unitOneAdapter.notifyDataSetChanged();
}

public List<String> updateList(List<String> myArray, String[] list){
    for(int i = 0; i < list.length; i++){
        myArray.add(list[i]);
    }
    return myArray;
}

//Overloaded method used for ArrayAdapters
public ArrayAdapter<String> updateList(ArrayAdapter<String> myArray, String[] list){
    for(int i = 0; i < list.length; i++){
        myArray.add(list[i]);
    }
    return myArray;
}
public类MainActivity扩展了AppCompatActivity{
专用图像视图等符号;
专用微调器转换微调器、UnitOne微调器、unitTwoSpinner;
私有EditText unitOneEditText、unitTwoEditText;
私有列表selectedList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
equalSign=(ImageView)findViewById(R.id.等号);
等号setImageResource(R.drawable.equal_sign_black_2);
unitOneEditText=(EditText)findViewById(R.id.unit\u one);
unitTwoEditText=(EditText)findViewById(R.id.unit\u two);
conversionSpinner=(微调器)findViewById(R.id.conversion\u微调器);
字符串[]转换列表={“长度”、“质量”、“时间”、“温度”、“体积”};
字符串[]长度列表={“公里”、“米”、“厘米”、“毫米”、“微米”、“纳米”、“英里”、“码”、“英寸”};
字符串[]质量列表={“公吨”、“千克”、“克”、“毫克”、“微克”、“磅”、“盎司”};
String[]time_list={“纳秒”、“微秒”、“毫秒”、“秒”、“分”、“小时”、“日”、“年”、“十年”、“世纪”};
字符串[]温度列表={“华氏”、“摄氏”、“开尔文”};
String[]volume_list={“美国液体加仑”、“美国液体夸脱”、“美国液体品脱”、“美国法定杯”、“美国液体盎司”、“美国大汤匙”、“美国茶匙”、“升”、“毫升”};
Listconversion_types=新的ArrayList();
Listlength=新的ArrayList();
Listmass=newarraylist();
Listtime=新的ArrayList();
Listtemp=新的ArrayList();
Listvolume=新的ArrayList();
转换类型=更新列表(转换类型、转换列表);
长度=更新列表(长度、长度和列表);
mass=更新列表(mass,mass\u列表);
时间=更新列表(时间,时间列表);
temp=更新列表(temp,temp\u列表);
卷=更新列表(卷、卷列表);
selectedList=长度;
ArrayAdapter conversionAdapter=新的ArrayAdapter(此,
android.R.layout.simple_微调器_下拉列表_项,转换_类型);
setAdapter(conversionAdapter);
conversionSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
字符串unitType=(字符串)父级.getItemAtPosition(位置);
开关(单元式){
案例“长度”:
Toast.makeText(getApplicationContext(),“Length”,Toast.Length_SHORT.show();
打破
案例“质量”:
Toast.makeText(getApplicationContext(),“Mass”,Toast.LENGTH\u SHORT.show();
打破
案例“时间”:
Toast.makeText(getApplicationContext(),“Time”,Toast.LENGTH\u SHORT.show();
打破
案例“温度”:
Toast.makeText(getApplicationContext(),“Temperature”,Toast.LENGTH\u SHORT.show();
打破
案例“卷”:
Toast.makeText(getApplicationContext(),“Volume”,Toast.LENGTH\u SHORT.show();
打破
}
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
unitOneSpinner=(Spinner)findViewById(R.id.unit\u one\u Spinner);
ArrayAdapter unitOneAdapter=新的ArrayAdapter(此,
android.R.layout.simple\u微调器\u下拉菜单\u项目,selectedList);
unitOneSpinner.setAdapter(unitOneAdapter);
unitOneSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
unitTwoSpinner=(Spinner)findViewById(R.id.unit\u two\u Spinner);
ArrayAdapter unitTwoAdapter=新的ArrayAdapter(此,
android.R.layout.simple\u微调器\u下拉菜单\u项目,selectedList);
unitTwoSpinner.setAdapter(unitTwoAdapter);
unitTwoSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
unitOneAdapter.clear();
unitOneAdapter=updateList(unitOneAdapter,mass\u列表);
unitOneAdapter.notifyDataSetChanged();
}
公共列表更新列表(列表myArray,字符串[]列表){
for(int i=0;i
您面临的问题是什么?我有3个微调器。主微调器允许用户选择单位类型(长度、质量、时间等)。当用户选择其中一个选项时,我希望第二个和第三个微调器显示反映第一个微调器单位的列表。例如,用户为第一个微调器选择时间,第二个微调器将具有