【发布时间】:2015-04-05 01:40:31
【问题描述】:
这是一个简单的应用程序的 gif 来说明我的意思:Video Gif here
我有一个 Spinner,这是我的 XML 代码:
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/uniSpinner"
android:layout_weight="1.5"
android:spinnerMode="dialog"
android:prompt="@string/type_default"/>
我已经学习了一些教程并浏览了这里,以使用 parse.com 向微调器动态添加内容。内容已成功添加,但在选择列表中的项目时不会触发 OnItemSelected,所选项目也不会显示在微调器中。
oncreate 上面的代码:
Spinner uniSpinner;
List<String> uniList;
oncreate 中的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from main.xml
setContentView(R.layout.activity_register);
uniSpinner = (Spinner) findViewById(R.id.uniSpinner);
uniList = new ArrayList<String>();
addItemsToSpinner();
InitialSetUpUI();
创建微调器的代码:
public void addItemsToSpinner()
{
ParseQuery<ParseObject> query = ParseQuery.getQuery("University");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> objects, ParseException e) {
if (e == null)
{
for(ParseObject university : objects){
uniList.add(university.getString("name"));
}
}
else
{
}
}
});
}
public void InitialSetUpUI()
{
Spinner spinner1 = (Spinner) findViewById(R.id.uniSpinner);
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item,uniList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter);
spinner1.setOnItemSelectedListener(new mySpinnerListener());
}
class mySpinnerListener implements Spinner.OnItemSelectedListener
{
@Override
public void onItemSelected(AdapterView parent, View v, int position,long id) {
// TODO Auto-generated method stub
Toast.makeText(parent.getContext(), "test: " +
parent.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView parent) {
// TODO Auto-generated method stub
// Do nothing.
}
}
不知道哪里出了问题,尝试了许多不同的教程和方法来创建相同的东西。没有任何效果,也许我错过了一些简单的东西,我不确定!如果有人可以提供帮助,那就太好了:)
【问题讨论】:
-
为什么要为同一个 Spinner 创建两个引用,分别命名为“uniSpinner”和“spinner1”?我已经尝试过你的代码,它对我来说工作正常。
-
我注意到在你的 done() 方法中,你没有在适配器上调用 notifyDataSetChanged() 。当 ListView 没有使用 notifyDataSetChanged() 与适配器同步时,我看到了奇怪的事情发生。我会尝试重写代码,以便可以从 done() 回调方法访问适配器,并且可以在 done() 方法结束时调用 notifyDataSetChanged()。
-
@UsmanAliButt 这是因为我正在测试一些其他代码并且忘记删除以前的引用。请问你是用什么模拟器测试的?可能是原因
-
我在 Nexus 5 设备上测试过(不是在模拟器上)
-
@krislarson 你能提供一个例子吗?我还不太擅长这些东西,哈哈
标签: java android android-studio android-spinner onitemselectedlistener