如何在spinner onItemSelected方法上修复自动查看另一个活动

时间:2017-05-05 14:42:21

标签: java android

我正在开发简单的android项目,需要android studio中的微调器小部件。我想要做的是,当用户从微调器中选择选项时,它将打开另一个活动。而我正处于编码的中间。我决定在Intent中使用switch case条件。问题是每当我运行应用程序时,它将自动转到我声明的特定活动位置。即使我没有在微调器上选择任何选择。 注意:log cat没有显示任何错误

对于像我这样的初学者,非常感谢你的帮助。

public class CustomOnItemSelectedListener extends Activity implements
        OnItemSelectedListener {

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

        // **************************** below here is where I start the new activity
        switch (pos) {
            case 0 :
                Intent i = new Intent(app.this, home.class);
                app.this.startActivity(i);
                break;

            case 1 :
                //Intent intent = new Intent(app.this, about.class);
                //app.this.startActivity(intent);
                break;

            case 2 :
                //Intent intent1 = new Intent(app.this, home.class);
                //app.this.startActivity(intent1);
                break;

        }
        // **************************** above here is where I start the new activity
    }

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

    }
}

2 个答案:

答案 0 :(得分:1)

试试这个

在您的班级中声明一个int,例如在onCreate()之前,然后在onCreate()中将其指定为0.使用此变量检查在使用微调器选择内容时是否大于0,如下所示。

public class ExampleActivity extends AppCompatActivity {
private int spinnerCheck;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mSpinnerCheck = 0;

    mMySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            int itemId = (int) id;

            // For some reason this method is called during initialization, so increment counter once to prevent it from auto selecting first item when loading view
            spinnerCheck += 1;

            if (spinnerCheck > 1) {
                switch (pos) {
                    case 0:
                        Intent i = new Intent(app.this, home.class);
                        app.this.startActivity(i);
                        break;

                    case 1:
                        //Intent intent = new Intent(app.this, about.class);
                        //app.this.startActivity(intent);
                        break;

                    case 2:
                        //Intent intent1 = new Intent(app.this, home.class);
                        //app.this.startActivity(intent1);
                        break;

                }
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
   }
}

出于某种原因,它选择了第一个项目,但不确定原因,但这应该有效。

答案 1 :(得分:0)

默认情况下创建应用程序时,会在您的微调器中选择第一个选项,并调用您的侦听器。为避免这种情况,您可以使用@Simon

的解决方案

或者您可以使用按钮确认您的选择并在按下此按钮时更改您的活动,而不是在您的微调器中选择项目时。

<强>更新 您还可以使用无用的文本填充您的微调器的第一个条目,该文本可以是&#34;选择活动&#34;并在侦听器中将您的开关设置为1而不是0