求助Spinner下OnItemSelectedListener执行顺序?

restarted 2013-07-11 02:42:36

package com.rivershuang.sipnnertest;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;

public class MainActivity extends Activity {

private Spinner test_Spinner = null;
private EditText test_EditText = null;
private String[] test_str = {"A", "B", "C"};

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

test_Spinner = (Spinner) findViewById(R.id.test_spinner);
test_EditText = (EditText) findViewById(R.id.test_edittext);

ArrayAdapter<String> test_Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,
test_str);
test_Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
test_Spinner.setAdapter(test_Adapter);

test_Spinner.setSelection(2);
test_EditText.setText("写入测试");

test_Spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
test_EditText.setText("");
}

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

}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}


test_Spinner.setSelection(2);
test_EditText.setText("写入测试");


onItemSelected中执行是当spinner选择变化时,edittext清空
oncreate中执行顺序是(我认为是)
test_Spinner.setSelection(2);...................test_EditText.setText("");.................test_EditText.setText("写入测试");
但结果是清空的
debug后发现,执行顺序为:
test_Spinner.setSelection(2);.................test_EditText.setText("写入测试");...................test_EditText.setText("");


我在我的其他项目遇到了这个问题,现在没法用spinner变化后控制其他控件,现求助
...全文
378 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
veardn 2013-07-12
  • 打赏
  • 举报
回复
其实我比较懒,昨天没去查源码,今天查了后发现setSelection(int)这个方法最终是会post到主线程的消息队列里的,而setSelection(int, boolean)是直接修改ui。区别就在这吧
restarted 2013-07-11
  • 打赏
  • 举报
回复
引用 11 楼 veardn 的回复:
onItemSelected这个方法应该是有用的 你试试view.setText("");
我用了别的很笨的方法做了这个功能,没办法了,赶时间,帖子留着我们慢慢研究 不执行的原因我知道了,我明天打出来告诉你 我先把分给你,多谢了
veardn 2013-07-11
  • 打赏
  • 举报
回复
onItemSelected这个方法应该是有用的 你试试view.setText("");
restarted 2013-07-11
  • 打赏
  • 举报
回复
引用 9 楼 veardn 的回复:
我猜默认是在动画结束后才去正真setSelection,去掉动画就立即setSelection了
还不是很完美 debug后发现情况是这样的 如果用setSelection(int, boolean) 执行情况是 test_Spinner.setSelection(2);.................test_EditText.setText("写入测试"); 也就是说 ...................test_EditText.setText("");这步没执行,好奇怪
veardn 2013-07-11
  • 打赏
  • 举报
回复
我猜默认是在动画结束后才去正真setSelection,去掉动画就立即setSelection了
restarted 2013-07-11
  • 打赏
  • 举报
回复
引用 7 楼 veardn 的回复:
[quote=引用 5 楼 restarted 的回复:] [quote=引用 4 楼 veardn 的回复:] setSelection我记得有个重载方法的 setSelection(int, boolean) 你试试用setSelection(2, true)或者setSelection(2, false);看看有用没
Jump directly to a specific item in the adapter data. Parameters: position animate 这个应该是控制动画的true/false[/quote] 恩,默认是有动画的,去掉动画试试[/quote] 但好像在我的demo里true和false都可以,我先试试我的工程中效果如何,稍等
veardn 2013-07-11
  • 打赏
  • 举报
回复
引用 5 楼 restarted 的回复:
[quote=引用 4 楼 veardn 的回复:] setSelection我记得有个重载方法的 setSelection(int, boolean) 你试试用setSelection(2, true)或者setSelection(2, false);看看有用没
Jump directly to a specific item in the adapter data. Parameters: position animate 这个应该是控制动画的true/false[/quote] 恩,默认是有动画的,去掉动画试试
restarted 2013-07-11
  • 打赏
  • 举报
回复
引用 4 楼 veardn 的回复:
setSelection我记得有个重载方法的 setSelection(int, boolean) 你试试用setSelection(2, true)或者setSelection(2, false);看看有用没
哇,厉害耶,这个还真的可以,这是啥意思,求教!!!
restarted 2013-07-11
  • 打赏
  • 举报
回复
引用 4 楼 veardn 的回复:
setSelection我记得有个重载方法的 setSelection(int, boolean) 你试试用setSelection(2, true)或者setSelection(2, false);看看有用没
Jump directly to a specific item in the adapter data. Parameters: position animate 这个应该是控制动画的true/false
veardn 2013-07-11
  • 打赏
  • 举报
回复
setSelection我记得有个重载方法的 setSelection(int, boolean) 你试试用setSelection(2, true)或者setSelection(2, false);看看有用没
restarted 2013-07-11
  • 打赏
  • 举报
回复
引用 2 楼 lieri111 的回复:
你可以加一个其他的控件,让这个控件先requestfocus,然后再测试你的代码。你的代码顺序就是先test_EditText.setText("写入测试");然后在test_EditText.setText("");
麻烦详细一点,谢谢,requestfocus这个用的顺序,可以在我这个代码里面模拟一下吗 另,为何我这个spinner控制是先选择了,再设置文本的,却反过来了呢
passself 2013-07-11
  • 打赏
  • 举报
回复
你可以加一个其他的控件,让这个控件先requestfocus,然后再测试你的代码。你的代码顺序就是先test_EditText.setText("写入测试");然后在test_EditText.setText("");
凉凉二点凉 2013-07-11
  • 打赏
  • 举报
回复
嗯哼,一直没注意这个 如果可以你可以把一部分代码放到onResume里面试试

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧