动态设置下拉框的值

4
我有一个如下的 ArrayAdapter
ArrayAdapter<String>dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item);

这是我将要用于我的Spinner的适配器。我有一个在strings.xml文件中的值集(字符串数组)供Spinner使用。如何在程序中动态地将string.xml中的设置到Spinner中?请帮忙!

https://dev59.com/nl7Va4cB1Zd3GeqPIUyv - Gophermofur
5个回答

5

在创建ArrayAdapter时,将其添加进去即可。

String[] yourArray = getResources().getStringArray(R.array.array_name);

ArrayAdapter<String>dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, yourArray);

我们还需要传递TextView的ID。 ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(), R.layout.row_spinner_text, R.id.tv_spinner_value, dataArray); - DJtiwari

4
您可以尝试像这样做:

您可以尝试类似以下的操作:

String[] mTestArray;
ArrayAdapter<String>dataAdapter;

mTestArray = getResources().getStringArray(R.array.testArray);
dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,mTestArray);

然后将适配器附加到Spinner上。

spinner.setAdapter(dataAdapter);

希望这能帮到你!!!

非常感谢您的回复。我非常感激!我给你点赞👍! - PeakGen

2
spinner2 = (Spinner) findViewById(R.id.spinner2);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item);  
String[] itemNames = getResources().getStringArray(R.array.stringArrayName); 

   for (int i = 0; i < 16; i++) // Maximum size of i upto --> Your Array Size 
    {  
    dataAdapter.add(itemNames[i]);  
     } 

spinner2.setAdapter(dataAdapter);

2
如果您想从网络服务加载数据并将该数据设置在您的spinner中,您可以使用以下代码:
public class MainActivity extends AppCompatActivity {

    Spinner spinner;
    List<String> usersList;
    ArrayAdapter<String> catAdapter;

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

        spinner = (Spinner)findViewById(R.id.spinner);
        usersList = new ArrayList<String>();

        catAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, usersList);
        spinner.setAdapter(catAdapter);

        getHttpResponse();

    }

    public void getHttpResponse() {

        String url = "https://cakeapi.trinitytuts.com/api/listuser";

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(url)
                .header("Accept", "application/json")
                .header("Content-Type", "application/json")
                .build();

        client.newCall(request).enqueue(new Callback() {

            @Override
            public void onFailure(Call call, IOException e) {
                String mMessage = e.getMessage().toString();
                Log.w("failure Response", mMessage);
                //call.cancel();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                final String mMessage = response.body().string();

                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.e("Response", mMessage);
                        try {
                            JSONObject users = new JSONObject(mMessage);
                            JSONArray usersArr = users.getJSONArray("users");

                            for(int i =0; i < usersArr.length(); i++){
                                JSONObject user = usersArr.getJSONObject(i);
                                Log.e("user", user.getString("username"));
                                usersList.add(user.getString("username"));
                            }

                            catAdapter.notifyDataSetChanged();


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                });
            }
        });
    }
}

您可以在此帖子中阅读完整信息:向下拉列表添加动态数据


1

这篇教程:Android Spinners 指出,你可以使用以下代码基于资源来设置Spinner数组:

ArrayAdapter<CharSequence> dataAdapter = ArrayAdapter.createFromResource(this,
    R.array.string-array-id, android.R.layout.simple_spinner_item);
dataAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

使用createFromResource()方法代替new,并提供你的数组资源ID,应该能够实现预期的结果。更多细节请参见教程。

但问题明确要求以实用/动态的方式来完成(即不将值存储在资源文件中,而是可能在运行时获取)。我不明白这个回答如何解决问题。 - JCutting8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接