【问题标题】:Spinner option opening a new Activity issueSpinner 选项打开一个新的 Activity 问题
【发布时间】:2016-02-01 11:45:17
【问题描述】:

我是 Android 开发和 Java 的新手,我正在尝试根据网络上的教程制作一个应用程序。找不到任何适合我的东西。我有一个带有 5 个选项的简单微调器,我希望在单击选项以打开新活动时使用它。这是我到目前为止所拥有的,当我进入“游戏”选项卡以从微调器中选择我想要的内容时,它会直接进入第一个案例(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;
}

}

【问题讨论】:

  • 你能说得更清楚些吗,因为 (position>0 0) 对我没有任何意义...

标签: android arrays android-activity spinner


【解决方案1】:

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

希望这会有所帮助。

更新

声明初始化模式的新变量

Spinner gamesCategory;
boolean initializationMode = true;

然后在onSpinnerSelection中使用这个变量onCreateView 旋转游戏类别; 布尔初始化模式 = 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;
}

【讨论】:

  • 也许它会有所帮助,但我不明白我需要改变什么。正如我所提到的,我只是部分理解所有这些......如果你能给我这个带有代码的例子,也许我会更好地理解。非常感谢。
  • 你好 Mustansar !用你的建议更新了代码,它有一个例外。当我在微调菜单中推动动物时,它会打开身体类,依此类推。我推送的内容与屏幕上显示的内容之间存在 1 的差异。我已经更改了案例,从 1 到 5 开始并解决了这个问题。非常感谢!
  • 现在发生的事情是,如果我是第一次选择,微调器可以正常工作。因此,如果我从微调器中选择 Animals,将显示对应于 GameAnimals 类的 game_animals.xml。所以这很好。但是如果我使用后退按钮,我会回到微调器,选择动物选项。现在,如果我想再次查看动物对应的 xml,我必须先选择另一个选项,然后返回到要再次显示 game_animals.xml 的动物选项。这不是一个大问题,但知道如何解决这个问题可能对我有用。谢谢!
  • 您可以在按返回键之前保存选择,然后您再次来,检索该选择,然后调用gamesCategory.setSelection(your_retrieved_selection);,您可以使用Preferences 保存您的选择。
  • 非常感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多