簡體   English   中英

Android:有沒有辦法根據來自其他活動的用戶輸入來切換微調器數組?

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

我是Android開發的初學者。 我正在嘗試為 class 項目制作一個應用程序。 在注冊(注冊活動)期間,用戶可以從微調器中選擇任何大陸。 在另一個活動中,用戶可以根據用戶之前從注冊活動的旋轉器中選擇的大洲來選擇國家/地區。 我的 string.xml 文件中已經有不同的 arrays。

我的想法是,在第二個活動中,如果用戶選擇亞洲,這個布局將有亞洲國家的微調器顯示。 如果用戶選擇歐洲,微調器將顯示歐洲國家(來自 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>

我還有一個用於歐洲和其他大陸的字符串數組。 我的布局上有一個微調器,但我不知道如何根據第一個活動的用戶輸入來實現不同的 arrays。 我還沒有在微調器上分配任何數組/選項。 非常感謝任何類型的幫助/建議/資源/建議。

您可以在第二個活動中使用一個方法,該方法使用字符串數組更新微調器適配器。

或者你可以有一個公共變量作為一個數組,作為你選擇的數組。 該數組可以根據微調器的選定 state 進行更新。 然后,您可以從第二個活動中訪問此數組,並在設置微調器的適配器時使用它。

兩者中的最后一個可能是最簡單的。

這是一個如何做到這一點的例子。 第一個活動包含一個微調器和一個按鈕,可將您帶到第二個活動

第一項活動:

//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]);
    }


}

第二個活動:

//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);

}

字符串.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>

基於https://developer.android.com/develop/ui/views/components/spinner#kotlin

我將上面鏈接中的示例 function 設置為在體積或重量單位 arrays 之間“切換”:

private fun refillSpinner(radioChoiceVolWei: Int) {
    val fromSpinner: Spinner = findViewById(R.id.from_units)

    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter.createFromResource(
        this,
        radioChoiceVolWei, // Reference to the Res string-array
        android.R.layout.simple_spinner_item
    ).also { adapter ->
        // Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        // Apply the adapter to the spinner
        fromSpinner.adapter = adapter
    }
}

然后我撥打 function:

    refillSpinner(R.array.weight_units_array)

或者

    refillSpinner(R.array.volume_units_array)

arrays 有點像你的:

<string-array name="weight_units_array">
    <item>kilogram</item>
    <item>gram</item>
    <item>ounce</item>
</string-array>

<string-array name="volume_units_array">
    <item>litre</item>
    <item>millilitre</item>
    <item>ounce</item>
</string-array>

問候。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM