微调器选项打开一个新的 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;
然后在onCreateView
中onSpinnerSelection
使用这个变量
微调游戏类别;
布尔初始化模式 = 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;
}
我是 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;
然后在onCreateView
中onSpinnerSelection
使用这个变量
微调游戏类别;
布尔初始化模式 = 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;
}