如何将项目添加到 Android 中的微调器?

Posted

技术标签:

【中文标题】如何将项目添加到 Android 中的微调器?【英文标题】:How to add items to a spinner in Android? 【发布时间】:2011-07-11 15:07:54 【问题描述】:

如何向微调器添加项目?

【问题讨论】:

如果你想动态添加项目到你的列表并调用adapter.notifyDataSetChanged() 【参考方案1】:

XML 文件:

<Spinner
    android:id="@+id/Spinner01"
    android:layout_
    android:layout_/>

Java 文件:

public class SpinnerExample extends Activity 

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] arraySpinner = new String[] 
            "1", "2", "3", "4", "5", "6", "7"
        ;
        Spinner s = (Spinner) findViewById(R.id.Spinner01);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, arraySpinner);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(adapter);
    

See spinner example.

【讨论】:

虽然理论上可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。 用这个 android.R.layout.simple_spinner_dropdown_item 代替这个 android.R.layout.simple_spinner_item 看起来好多了 什么是array_spinner?数组的名称是 arraySpinner。是拼写错误还是只能这样> 考虑添加adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);(在s.setAdapter(adapter);之前,使下拉菜单看起来更好。 @StephenM 更改了链接【参考方案2】:

我找到了另一个选项:布局文件中的微调器定义

<Spinner android:id="@+id/spinner"
    android:layout_
    android:drawSelectorOnTop="true"
    android:prompt="@string/spin"
    android:entries="@array/spinnerItems"
/>

文件array.xml中的项目定义:

<resources>
    <string-array name="spinnerItems">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
    </string-array>
</resources>

Link to the full source of the code

【讨论】:

我尝试了上述所有方法和其他一些教程,但这是唯一对我有用的方法。非常感谢! 很高兴帮助你@snapplex ;) 这应该是最佳答案。干净。【参考方案3】:

试试这个代码:

final List<String> list = new ArrayList<String>();
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");

final String[] str = "Report 1", "Report 2", "Report 3", "Report 4", "Report 5";

final Spinner sp1 = (Spinner) findViewById(R.id.spinner1);
final Spinner sp2 = (Spinner) findViewById(R.id.spinner2);

ArrayAdapter<String> adp1 = new ArrayAdapter<String>(this,
                              android.R.layout.simple_list_item_1, list);
adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp1.setAdapter(adp1);

ArrayAdapter<String> adp2 = new ArrayAdapter<String>(this,
                                  android.R.layout.simple_spinner_item, str);
adp2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp2.setAdapter(adp2);

sp1.setOnItemSelectedListener(new OnItemSelectedListener()
    
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) 
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), list.get(position), Toast.LENGTH_SHORT).show();
        

        @Override
        public void onNothingSelected(AdapterView<?> arg0) 
            // TODO Auto-generated method stub
        
    );

sp2.setOnItemSelectedListener(new OnItemSelectedListener()
    
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) 
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), str[position], Toast.LENGTH_SHORT).show();
        

        @Override
        public void onNothingSelected(AdapterView<?> arg0) 
            // TODO Auto-generated method stub
        
    );

您还可以通过字符串数组xml文件添加微调器项值..

<resources>
    <string name="app_name">Spinner_ex5</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
    <string-array name="str2">
        <item>Data 1</item>
        <item>Data 2</item>
        <item>Data 3</item>
        <item>Data 4</item>
        <item>Data 5</item>
    </string-array>
</resources>

在 mainActivity.java 中:

final Spinner sp3 = (Spinner) findViewById(R.id.spinner3);
ArrayAdapter<CharSequence> adp3 = ArrayAdapter.createFromResource(this,
                                    R.array.str2, android.R.layout.simple_list_item_1);

adp3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp3.setAdapter(adp3);
sp3.setOnItemSelectedListener(new OnItemSelectedListener()
    
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) 
            // TODO Auto-generated method stub
            String ss = sp3.getSelectedItem().toString();
            Toast.makeText(getBaseContext(), ss, Toast.LENGTH_SHORT).show();
        

        @Override
        public void onNothingSelected(AdapterView<?> arg0) 
            // TODO Auto-generated method stub
        
    );

【讨论】:

【参考方案4】:

要在 Spinner 中添加项目,您可以做一件事,尝试创建一个适配器,然后将项目添加/删除到适配器中,然后您可以使用 setAdapter() 轻松将该适配器绑定到微调器 方法。

这是一个例子:

spinner.setAdapter(adapter);
adapter.add(item1);
adapter.add(item2);
adapter.add(item3);
adapter.add(item4);
adapter.add(item5);
adapter.notifyDataSetChanged();
spinner.setAdapter(adapter);

【讨论】:

感谢您的回复,我得到了解决方案,现在我也面临一个问题。 我想获取微调器的选定项目,即它的位置,因为我想进一步将它传递给其他方法,看看我做了什么... dataspin.setOnItemSelectedListener(new myitemlistener()); dataspin 是我的 Spinner 对象 @Override public void onItemSelected(AdapterView> parent, View view, int position, long id) // TODO 自动生成的方法存根 String p=parent.getItemAtPosition(position).toString( ); int pos=(int) parent.getItemIdAtPosition(position); System.out.println("微调器的位置..."+pos);设置搜索视图(位置); 如果我这样做比微调项目不显示【参考方案5】:
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

在您的布局中:

<Spinner 
        android:id="@+id/spinner"
        android:layout_
        android:layout_
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

【讨论】:

但是你如何获得选中的项目呢? Java 文件中的第一个 TypeCast。然后使用 Spinner 微调器;微调器=findViewById(R.id.spinner); spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() @Override public void onItemClick(AdapterView> parent, View view, int position, long id) );【参考方案6】:

这段代码基本上是读取一个 JSON 数组对象,并将每一行转换为作为参数传递的微调器中的一个选项:

public ArrayAdapter<String> getArrayAdapterFromArrayListForSpinner(ArrayList<JSONObject> aArrayList, String aField)

    ArrayAdapter<String> aArrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item);
    aArrayAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item); //android.R.layout.simple_spinner_dropdown_item
    try 
        for (int i = 0; i < aArrayList.size(); i++)
        
            aArrayAdapter.add(aArrayList.get(i).getString(aField)); 
        
     catch (JSONException e) 
        e.printStackTrace();
        ShowMessage("Error while reading the JSON list");
    
    return aArrayAdapter;       

【讨论】:

【参考方案7】:

在 XML 布局中添加一个微调器,然后将此代码添加到 Java 文件中:

Spinner spinner;
spinner = (Spinner) findViewById(R.id.spinner1) ;
java.util.ArrayList<String> strings = new java.util.ArrayList<>();
strings.add("Mobile") ;
strings.add("Home");
strings.add("Work");
SpinnerAdapter spinnerAdapter = new SpinnerAdapter(AddMember.this, R.layout.support_simple_spinner_dropdown_item, strings);
spinner.setAdapter(spinnerAdapter);

【讨论】:

'SpinnerAdapter' 是抽象的;无法实例化【参考方案8】:

更新列表后添加此代码

假设:

ArrayAdapter 变量名为dataAdapter, 并且 List 变量名称是 keys

dataAdapter.addAll(keys); dataAdapter.notifyDataSetChanged();

【讨论】:

【参考方案9】:

要向Spinner添加一项,您可以:

ArrayAdapter myAdapter = 
  ((ArrayAdapter) mySpinner.getAdapter());

myAdapter.add(myValue);

myAdapter.notifyDataSetChanged();

【讨论】:

发生“UnsupportedOperationException”【参考方案10】:

只是清除适配器,添加所有iten并通知更改,如下所示:

  public void show(List<Object> objLIst) 
    adapter.clear();
    adapter.addAll(objLIst);
    adapter.notifyDataSetChanged(); 

【讨论】:

【参考方案11】:

更简单的方法是使用材质微调器库:https://github.com/jaredrummler/MaterialSpinner

首先添加到您的项目中:

compile 'com.jaredrummler:material-spinner:1.2.4'

并像这样使用:

<com.jaredrummler.materialspinner.MaterialSpinner
    android:id="@+id/spinner"
    android:layout_
    android:layout_/>

和java代码,你可以很容易地在java中添加项目:

MaterialSpinner spinner = (MaterialSpinner) findViewById(R.id.spinner);
spinner.setItems("item 1", "item 2", "item 3", "item 4", "item 5");
spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() 

  @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) 
    Snackbar.make(view, "Clicked " + item, Snackbar.LENGTH_LONG).show();
  
);

【讨论】:

以上是关于如何将项目添加到 Android 中的微调器?的主要内容,如果未能解决你的问题,请参考以下文章

Android将微调器缩短到内容宽度

如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio

Android:将 id 和 name 从微调器中的选定项目放入两个不同的 textViews

无法在android中选择微调器项目

将微调器添加到 ActionBar(不是导航

在 AsyncTask 中动态地将项目添加到微调器