微调器选项打开一个新的 Activity 问题

Spinner option opening a new Activity issue

我是 Android 开发和 Java 的新手,我正在尝试根据网络上的教程开发一个应用程序。找不到任何适合我的东西。我有一个带有 5 个选项的简单微调器,当单击一个选项以打开一个新的 activity 时,我会喜欢它。这是我目前所拥有的,发生的事情是,当我进入“游戏”选项卡以 select 我想要从微调器中获得的内容时,它会直接转到第一种情况 (GamesAnimals)。我想它一定是简单的东西,但直到现在我才找到它。

在此先感谢您的支持。

代码如下:

package com.gadgetcatch.firstwords;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;


public class Games extends Fragment {

Intent i;

Spinner gamesCategory;

String [] shapes = {
        "",
        "ANIMALS",
        "BODY",
        "CLOTHES",
        "FOOD",
        "TRANSPORT",
};
private static final String ARG_SECTION_NUMBER = "section_number";

public static Games newInstance(int sectionNumber) {
    Games fragment = new Games();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, sectionNumber);
    fragment.setArguments(args);
    return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v =inflater.inflate(R.layout.games,container,false);

    gamesCategory = (Spinner)v.findViewById(R.id.spinner);
    ArrayAdapter <String> nameArrayAd = new ArrayAdapter <>(getActivity(), android.R.layout.simple_spinner_dropdown_item, shapes);

    gamesCategory.setAdapter(nameArrayAd);
    gamesCategory.setOnItemSelectedListener(
            new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

                    int position = gamesCategory.getSelectedItemPosition();

                    if (position > 0) ;
                    switch (position) {

                        case 0:
                            i = new Intent(getActivity(), GamesAnimals.class);
                            break;
                        case 1:
                            i = new Intent(getActivity(), GamesBody.class);
                            break;
                        case 2:
                            i = new Intent(getActivity(), GamesClothes.class);
                            break;
                        case 3:
                            i = new Intent(getActivity(), GamesFood.class);
                            break;
                        case 4:
                            i = new Intent(getActivity(), GamesTransport.class);
                            break;

                    }

                    startActivity(i);

                }

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

                }
            }
    );


    return v;
}

}

实际上,当您设置 spinner Adaper 时,会触发 spinner 位置 0 的默认选择,这就是启动您的 GameAnimals 活动的原因。你能做的就是区分初始化模式和选择模式。在构建 UI 时,将 initialization 的布尔值设置为 true,然后在 onItemselection 中将其设置为 false。这项工作可以解决您的问题。

希望这对您有所帮助。

更新

声明声明初始化模式的新变量

Spinner gamesCategory;
boolean initializationMode = true;

然后在onCreateViewonSpinnerSelection使用这个变量 微调游戏类别; 布尔初始化模式 = true;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v =inflater.inflate(R.layout.games,container,false);

    gamesCategory = (Spinner)v.findViewById(R.id.spinner);
    ArrayAdapter <String> nameArrayAd = new ArrayAdapter <>(getActivity(), android.R.layout.simple_spinner_dropdown_item, shapes);

    gamesCategory.setAdapter(nameArrayAd);
    initializationMode = true;
    gamesCategory.setOnItemSelectedListener(
            new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                    if(!initializationMode) {
                    int position = gamesCategory.getSelectedItemPosition();

                    if (position > 0) ;
                    switch (position) {

                        case 0:
                            i = new Intent(getActivity(), GamesAnimals.class);
                            break;
                        case 1:
                            i = new Intent(getActivity(), GamesBody.class);
                            break;
                        case 2:
                            i = new Intent(getActivity(), GamesClothes.class);
                            break;
                        case 3:
                            i = new Intent(getActivity(), GamesFood.class);
                            break;
                        case 4:
                            i = new Intent(getActivity(), GamesTransport.class);
                            break;

                    }

                    startActivity(i);
                    } else {
            initializationMode = false;
                     }

                }

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

                }
            }
    );


    return v;
}