这是我的课程,它进入无限循环请检查我出错的地方......我正在尝试获取图像视图的id,使其随机,然后尝试使用imageview的描述设置文本视图
public class Object {
int ObectIds[];
LinearLayout HUDDisplay;
int HudDisplayText[] = {R.id.HUD_Text_Element1,
R.id.HUD_Text_Element2,
R.id.HUD_Text_Element3,
R.id.HUD_Text_Element4,
R.id.HUD_Text_Element5,
R.id.HUD_Text_Element6,
R.id.HUD_Text_Element7};
TextView[] text;
View v;
Object(Context context,View vs) {
super();
ObectIds = new int[8];
HUDDisplay=(LinearLayout)vs.findViewById(R.id.HUD_Display);
for (int i = 0; i < 8; i++) {
ObectIds[i] = (R.id.imageView1) + i;
Log.d("ImageView", "Image Id's " + ObectIds[i]);
}
randomize(vs);
setTextView();
}
public void setTextView()
{
for(int i=0;i<8;++i)
{
text[i] =(TextView) HUDDisplay.findViewById(HudDisplayText[i]);
text[i].setText(v.getContentDescription());
}
}
public void randomize(View vs) {
for (int i = 0; i < 8; i++) {
while (true) {
shuffleArray(ObectIds);
v = vs.findViewById(ObectIds[i]);
Log.d("Image", "Image Id's " + v.getId());
if (!v.isClickable()) {
v.setClickable(true);
break;
}
}
}
}
static void shuffleArray(int[] ar) {
Random rnd = new Random();
for (int i = ar.length - 1; i >= 0; i--) {
int index = rnd.nextInt(i + 1);
// Simple swap
int a = ar[index];
ar[index] = ar[i];
ar[i] = a;
}
}
}
答案 0 :(得分:1)
嘿,我发现你的代码&amp;在代码中发现错误:
请将以下代码与您的代码进行比较...构造函数
for (int i = 0; i < 8; i++) {
ObectIds[i] = **HudDisplayText[i]**;
Log.d("ImageView", "Image Id's " + ObectIds[i]);
}
答案 1 :(得分:0)
你有一个while(true)循环,只有当v不可点击时才会中断。如果v是可点击的,会发生什么?代码中的任何内容都不会将v设置为不可单击,默认情况下的视图不可单击。
答案 2 :(得分:0)
我注意到你正在使用Object类。对象基本上是所有类扩展的根。如果在构造函数中调用super(),它将调用超类构造函数,也就是Object ......这可能就是问题。
尝试查找有关如何从Java / Android开始的教程,因为您还使用了不推荐的变量名称。例如。在Java中: - 一个类以Capital开头 - 变量,以小写字母开头 - 函数以小写字母开头:
public class Captial
{
private int anIntegerStartsWithLowerCase;
private void functionsAreLowerCaseAsWell()
{
}
}
另外看看你的循环......它看起来永远不会结束