Android:有没有办法根据来自其他 activity 的用户输入来切换微调器数组?

Android: Is there a way to switch the spinner array based on user input from other activity?

我是 Android 开发的初学者。我正在尝试为 class 项目制作一个应用程序。在注册(Registration activity)期间,用户可以从微调器中选择任何大陆。在另一个 activity 中,用户可以根据用户之前在注册时从微调器中选择的大洲来选择国家 activity。我的 string.xml 文件中已经有不同的数组。

我的想法是,在第二个activity中,如果用户选择了亚洲,这个布局将有旋转器显示亚洲国家。如果用户选择欧洲,则微调器将显示欧洲国家(来自 strings.xml 的数组) 我在 string.xml

上的数组示例
 <string-array name="asia">
    <item>"India"</item>
    <item>"pakistan"</item>
    <item>"China"</item>
    <item>"Japan"</item>
    <item>"Bangladesh"</item>
</string-array>

我还有一个用于欧洲和其他大陆的字符串数组。我的布局上有一个微调器,但我不知道如何根据第一个 activity 的用户输入来实现不同的数组。我还没有在微调器上分配任何 arrays/options。任何一种 help/suggestions/resource/advice 都非常感谢。

您可以在第二个 activity 中使用一个方法,用字符串数组更新微调器适配器。

或者你可以有一个 public 变量作为一个数组,它充当你选择的数组。该数组可以根据微调器的选定状态进行更新。然后,您可以从第二个 activity 访问此数组,并在设置微调器的适配器时使用它。

两者中的最后一个可能是最简单的。

这是您如何操作的示例。第一个 activity 包含一个微调器和一个将您带到第二个

的按钮

第一activity:

//The spinner in the first activity
Spinner spinner;

//the lists that we use in our spinner
public List<String> asiaList = new ArrayList<String>();
public List<String> europeList = new ArrayList<String>();

//Our selected array
public List<String> selectedArray = new ArrayList<String>();


public static MainActivity mainActivity;

@SuppressLint("ResourceType")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainActivity = this;


    //Getting the xml arrays into our lists
    getListInfo(getResources().getStringArray(R.array.asia), asiaList);
    getListInfo(getResources().getStringArray(R.array.europe), europeList);



    //Your spinner
    spinner = findViewById(R.id.spinner1);

    // Spinner Drop down elements
    List<String> categories = new ArrayList<String>();

    //Items in your first spinner;
    categories.add("Asia");
    categories.add("Europe");

    // Creating adapter for spinner
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories);

    // Drop down layout style
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);


    //Isn't necessary and can be done by using spinner.getSelectedItemPosition()
    // Spinner click listener
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            //If asia is selected
            if(position == 0){
                selectedArray = asiaList;
            }else{
                selectedArray = europeList;
            }

        }

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

        }
    });


}
//function for your button to open next activity
public void OpenSecondActivity(View v){
        Intent myIntent = new Intent(MainActivity.this, secondActivity.class);
        startActivity(myIntent);
secondActivity.selectedArray = selectedArray;


        

}


//Put xml strings into your array lists;
public void getListInfo(String[] strings, List<String> list){
    for (int i = 0; i < strings.length; i++) {
        list.add(strings[i]);
    }


}

第二个Activity:

//Spinner second class
Spinner spinner;

public static List<String> selectedArray = new ArrayList<String>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);


    spinner = findViewById(R.id.spinner2);


    // Creating adapter for spinner and also reference the current list from first activity to get right info
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, selectedArray);

    // Drop down layout style
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);

}

strings.xml:

<string-array name="asia">
    <item>"India"</item>
    <item>"pakistan"</item>
    <item>"China"</item>
    <item>"Japan"</item>
    <item>"Bangladesh"</item>
</string-array>

<string-array name="europe">
    <item>"Sweden"</item>
    <item>"England"</item>
    <item>"Spain"</item>
    <item>"Norway"</item>
    <item>"Germany"</item>
</string-array>