我不能在 switch 语句中使用 Integer[] 数组吗?
Shouldn't I be able to use an Integer[] array in a switch statement?
我认为 Integer[]
数组可以用在 switch
语句中,因为自动装箱,其中 Integer
对象和 int
基元被交换回来由编译器自动来回。但是我没有运气将我的 Integer[]
项放入 OnClick
事件的 switch 语句中。当用户单击我的数组中的图像时,我希望它以新的 activity 打开。我究竟做错了什么?在我的代码中出现红色错误,在 case
数字和 startActivity(i)
中,所以这绝对是不正确的。谢谢。
GridViewSitesAdapter.java
package org.azurespot.cutelinks;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import org.azurespot.R;
/**
* Created by mizu on 2/11/15.
*/
public class GridViewSitesAdapter extends BaseAdapter {
public Context mContext;
public GridViewSitesAdapter(Context c) {
mContext = c;
}
// Keep all Images in array
public Integer[] mThumbIds = new Integer[]{
R.drawable.cute_overload, R.drawable.attack_of_the_cute,
R.drawable.zoo_borns, R.drawable.cutest_paw,
R.drawable.mochimochiland, R.drawable.baby_mugging,
R.drawable.cutest_food, R.drawable.tiny_cute_things,
R.drawable.etsy_robot_plush,
R.drawable.fuck_yeah_fruits,
R.drawable.ark_in_space,
R.drawable.we_heart_it
};
@Override
public int getCount() {
return mThumbIds.length;
}
@Override
public Object getItem(int position) {
return mThumbIds[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams
(270,270));
imageView.setBackgroundResource(R.drawable.gridview_image_border);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (mThumbIds){
case 0:
Intent i = new Intent(mContext, CuteOverloadActivity.class);
startActivity(i);
break;
case 1:
}
}
}
});
return imageView;
}
}
使用setTag/getTag
方法获取点击行的实际位置:
imageView.setTag(position);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int clickedPos=Integer.parseInt(v.getTag().toString());
switch (clickedPos){
case 0:
....
}
}
}
});
您的 switch 语句不应在 mThumbIds
上,而应在 position
上(因为它是决定要做什么的元素的位置)。请注意,您需要将 position
声明为 final
才能在 onClick
方法中访问它。
我认为 Integer[]
数组可以用在 switch
语句中,因为自动装箱,其中 Integer
对象和 int
基元被交换回来由编译器自动来回。但是我没有运气将我的 Integer[]
项放入 OnClick
事件的 switch 语句中。当用户单击我的数组中的图像时,我希望它以新的 activity 打开。我究竟做错了什么?在我的代码中出现红色错误,在 case
数字和 startActivity(i)
中,所以这绝对是不正确的。谢谢。
GridViewSitesAdapter.java
package org.azurespot.cutelinks;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import org.azurespot.R;
/**
* Created by mizu on 2/11/15.
*/
public class GridViewSitesAdapter extends BaseAdapter {
public Context mContext;
public GridViewSitesAdapter(Context c) {
mContext = c;
}
// Keep all Images in array
public Integer[] mThumbIds = new Integer[]{
R.drawable.cute_overload, R.drawable.attack_of_the_cute,
R.drawable.zoo_borns, R.drawable.cutest_paw,
R.drawable.mochimochiland, R.drawable.baby_mugging,
R.drawable.cutest_food, R.drawable.tiny_cute_things,
R.drawable.etsy_robot_plush,
R.drawable.fuck_yeah_fruits,
R.drawable.ark_in_space,
R.drawable.we_heart_it
};
@Override
public int getCount() {
return mThumbIds.length;
}
@Override
public Object getItem(int position) {
return mThumbIds[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams
(270,270));
imageView.setBackgroundResource(R.drawable.gridview_image_border);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (mThumbIds){
case 0:
Intent i = new Intent(mContext, CuteOverloadActivity.class);
startActivity(i);
break;
case 1:
}
}
}
});
return imageView;
}
}
使用setTag/getTag
方法获取点击行的实际位置:
imageView.setTag(position);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int clickedPos=Integer.parseInt(v.getTag().toString());
switch (clickedPos){
case 0:
....
}
}
}
});
您的 switch 语句不应在 mThumbIds
上,而应在 position
上(因为它是决定要做什么的元素的位置)。请注意,您需要将 position
声明为 final
才能在 onClick
方法中访问它。