Java Android:基于两个微调器选择组合的操作
我有一个有两个旋转器的活动。一个是头发的类型,另一个是头发的颜色。我希望图片(在头部)根据从微调器中选择的两个项目进行更改 以下是它应该做的:Java Android:基于两个微调器选择组合的操作,java,android,android-studio,android-spinner,android-image,Java,Android,Android Studio,Android Spinner,Android Image,我有一个有两个旋转器的活动。一个是头发的类型,另一个是头发的颜色。我希望图片(在头部)根据从微调器中选择的两个项目进行更改 以下是它应该做的: 已加载活动(微调器设置为“秃顶”和“黑色”) 头发是秃顶的 将头发类型更改为“男性短发” 头发变为黑色的男性短发 将颜色更改为“金发” 头发变为短的金色男性头发 但是第三步不行 这是我的密码: public class HeadZoom extends MainActivity implements AdapterView.OnItemSel
- 头发是秃顶的
- 头发变为黑色的男性短发
- 头发变为短的金色男性头发
public class HeadZoom extends MainActivity implements AdapterView.OnItemSelectedListener{
private Spinner hairSpinner;
private Spinner hairColor;
private String type;
private String color;
private ImageView imageView;
private List<String> hairTypeArray = new ArrayList<String>();
private List<String> hairColorArray = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.head_zoom);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
imageView = (ImageView) findViewById(R.id.head);
type="Bald";
hairSpinner = (Spinner) findViewById(R.id.hairSpinner);
hairSpinner.setOnItemSelectedListener(this);
List<String> hairTypeArray = new ArrayList<String>();
hairTypeArray.add("Bald");
hairTypeArray.add("Female Short");
hairTypeArray.add("Female Medium");
(...)
ArrayAdapter<String> hairTypeAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, hairTypeArray);
hairTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
hairSpinner.setAdapter(hairTypeAdapter);
color = "Black";
hairColor = (Spinner) findViewById(R.id.hairColor);
hairColor.setOnItemSelectedListener(this);
List<String> hairColorArray = new ArrayList<>();
hairColorArray.add("Black");
hairColorArray.add("Blonde");
hairColorArray.add("Blue");
(...)
ArrayAdapter<String> hairColorAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, hairColorArray);
hairColorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
hairColor.setAdapter(hairColorAdapter);
}
public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
if(parent.getId()==hairSpinner.getId())
type = hairTypeArray.get(position);
else
color = hairColorArray.get(position);
switch(type){
case "Bald":
imageView.setImageResource((R.drawable.sw_head));
break;
case "Female Short":
if(color=="Black")
imageView.setImageResource(R.drawable.fhair_short_black);
else if(color=="Blonde")
imageView.setImageResource(R.drawable.fhair_short_blonde);
else if(color=="Blue")
imageView.setImageResource(R.drawable.fhair_short_blue);
else if(color=="Brown")
(...)
break;
case "Female Medium":
if(color=="Black")
imageView.setImageResource(R.drawable.fhair_med_black);
else if(color=="Blonde")
imageView.setImageResource(R.drawable.fhair_med_blonde);
else if(color=="Blue")
imageView.setImageResource(R.drawable.fhair_med_blue);
else if(color=="Brown")
(...)
break;
case "Female Long":
(...)
default:
break;
}
}
public void onNothingSelected(AdapterView<?> parent){
}
这是因为您正在使用==运算符比较两个字符串对象。若在两个字符串对象之间使用==运算符,它将检查两个字符串是否具有相同的引用,而不考虑它们所持有的值 您需要这样进行比较:
if(color.equalsIgnoreCase("Black"))
或
这将检查字符串对象值而不是其引用
正如@sasikumar所建议的那样,还应删除局部变量
List<String> hairColorArray = new ArrayList<>();
List<String> hairTypeArray = new ArrayList<String>();
List hairoloraray=new ArrayList();
List hairTypeArray=new ArrayList();
这是因为您正在使用==运算符比较两个字符串对象。若在两个字符串对象之间使用==运算符,它将检查两个字符串是否具有相同的引用,而不考虑它们所持有的值
您需要这样进行比较:
if(color.equalsIgnoreCase("Black"))
或
这将检查字符串对象值而不是其引用
正如@sasikumar所建议的那样,还应删除局部变量
List<String> hairColorArray = new ArrayList<>();
List<String> hairTypeArray = new ArrayList<String>();
List hairoloraray=new ArrayList();
List hairTypeArray=new ArrayList();
原因是您已在全局中初始化了数组列表
private List<String> hairTypeArray = new ArrayList<String>();
private List<String> hairColorArray = new ArrayList<String>();
private List hairTypeArray=new ArrayList();
private List hairolorarray=new ArrayList();
因此,在oncreate方法之外,它只接受全局变量值。但是您只添加了本地arraylist oncreate方法的值。因此,请删除oncreate方法中的以下代码
List<String> hairColorArray = new ArrayList<>();
List<String> hairTypeArray = new ArrayList<String>();
List hairoloraray=new ArrayList();
List hairTypeArray=new ArrayList();
原因是您已在全局中初始化了数组列表
private List<String> hairTypeArray = new ArrayList<String>();
private List<String> hairColorArray = new ArrayList<String>();
private List hairTypeArray=new ArrayList();
private List hairolorarray=new ArrayList();
因此,在oncreate方法之外,它只接受全局变量值。但是您只添加了本地arraylist oncreate方法的值。因此,请删除oncreate方法中的以下代码
List<String> hairColorArray = new ArrayList<>();
List<String> hairTypeArray = new ArrayList<String>();
List hairoloraray=new ArrayList();
List hairTypeArray=new ArrayList();
两个数组大小相同?@sasikumar是的,它们都有7个值。两个数组大小相同?@sasikumar是的,它们都有7个值。非常感谢!真不敢相信我没发现这个。我已经快一个月没做这个项目了,因为我就是想不出哪里出了问题。我欠你一大笔钱!非常感谢你!真不敢相信我没发现这个。我已经快一个月没做这个项目了,因为我就是想不出哪里出了问题。我欠你一大笔钱!