如何将项目添加到 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
【讨论】:
【参考方案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 中的微调器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio