相关疑难解决方法(0)

如何在新实例化的Spinner上保持onItemSelected?

我想到了一些不太优雅的方法来解决这个问题,但我知道我必须遗漏一些东西.

onItemSelected立即开火,没有与用户进行任何交互,这是不受欢迎的行为.我希望UI等到用户选择之前做任何事情.

我甚至尝试过设置听众onResume(),希望这会有所帮助,但事实并非如此.

如何在用户触摸控件之前停止此操作?

public class CMSHome extends Activity { 

private Spinner spinner;

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

    // Heres my spinner ///////////////////////////////////////////
    spinner = (Spinner) findViewById(R.id.spinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.pm_list, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    };

public void onResume() {
    super.onResume();
    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
}

    public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {

     Intent i = new Intent(CMSHome.this, ListProjects.class);
     i.putExtra("bEmpID", parent.getItemAtPosition(pos).toString());
        startActivity(i);

        Toast.makeText(parent.getContext(), "The …
Run Code Online (Sandbox Code Playgroud)

android spinner android-spinner

405
推荐指数
13
解决办法
13万
查看次数

Spinner onItemSelected()执行不当

可能重复:
Android Spinner OnItemSelected错误调用(无需用户操作打开微调器)

有没有人知道如何在实例化布局时阻止onItemSelected()(OnItemSelectedListener接口)方法运行?我需要知道是否有办法做到这一点,因为我想保持我如何实例化我的布局与该侦听器分开.

我已经尝试在重写方法内部的所有代码周围创建一个最初设置为false的if语句,但是无法知道何时将其设置为true,因为重写的方法在onCreate(),onStart()之后运行,并且每次onResume()方法.

我没有找到任何明确的答案.任何明确的解决方案将不胜感激.

java android

43
推荐指数
3
解决办法
3万
查看次数

如果选择了非零位置,则旋转后Spinner的onItemSelected回调调用两次

当我创建我的活动时,我设置了一个Spinner,为它分配一个监听器和一个初始值.我知道onItemSelected在应用程序初始化期间会自动调用回调.我觉得很奇怪的是,当设备旋转时会发生两次这种情况,这会导致我遇到一些问题,我不得不绕过它.如果微调器初始选择为零,则不会发生这种情况.我能够隔离问题,这是触发它的最简单的活动:

public class MainActivity extends Activity implements OnItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Test","Activity onCreate");
    setContentView(R.layout.activity_main);
    ((Spinner)findViewById(R.id.spinner1)).setSelection(2);
    ((Spinner)findViewById(R.id.spinner1)).setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> spin, View selview, int pos, long selId)
{
    Log.i("Test","spin:"+spin+" sel:"+selview+" pos:"+pos+" selId:"+selId);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {}
}
Run Code Online (Sandbox Code Playgroud)

这是启动应用程序然后旋转设备时显示的logcat:

    I/Test( 9881): spin:android.widget.Spinner@4052f508 sel:android.widget.TextView@40530b08 pos:2 selId:2
    I/Test( 9881): Activity onCreate
    I/Test( 9881): spin:android.widget.Spinner@40535d80 sel:android.widget.TextView@40538758 pos:2 selId:2
    I/Test( 9881): spin:android.widget.Spinner@40535d80 sel:android.widget.TextView@40538758 pos:2 selId:2
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?我错过了什么吗?

android android-widget android-spinner

28
推荐指数
4
解决办法
1万
查看次数

如何使用Android Spinner作为下拉列表

我花了很长时间才知道Android Spinner.经过几次失败的实施尝试,并且在阅读了许多与我自己的问题部分相似但没有令人满意的答案的问题之后,还有一些没有任何答案,例如这里这里,我终于得到Android中的"微调器"并不意味着与桌面应用程序中的"下拉列表"或HTML中的选择相同.然而,我的应用程序(我猜测所有其他问题相似的海报的应用程序)需要的东西就像一个下拉框,而不是像一个微调器.

我的两个问题是我最初认为是OnItemSelectedListener的特殊性(我在这个网站上看到这些是单独的问题而不是一个):

  1. 在没有用户交互的情况下自动触发第一个列表项的初始选择.
  2. 当用户再次选择已选择的项目时,将忽略该项目.

现在我意识到,当你想到它时,它在旋转器上发生是有道理的- 它必须从选择的默认值开始,并且你只旋转它来改变那个值,而不是"重新选择"一个value - 文档实际上说:"仅当新选择的位置与先前选择的位置不同时才调用此回调".我已经看到答案表明你设置了一个标志来忽略第一个自动选择 - 我想我可以忍受,如果没有别的办法.

但是,因为我真正想要的是一个下拉列表,它应该作为一个下拉列表(并且用户可以并且应该期待),我需要的是 Spinner一样的行为就像一个下拉列表,就像一个组合-框.我不关心任何自动预选(这应该在没有触发我的听众的情况下发生),并且我想知道每个选择,即使它与之前的相同(毕竟,用户再次选择相同的项目) .

那么... Android中是否有可以做到这一点的东西,或者某些解决方法使Spinner表现得像下拉列表?如果这样的一个在这个网站,我还没有发现,并且具有满意的答案的问题,请让我知道(在这种情况下,我真诚地重复的问题道歉).

android selection spinner

20
推荐指数
2
解决办法
1万
查看次数