您好,我对Java和Android有点新鲜。我正在开展一个项目,它通过随机活动进行循环,我几天都遇到了问题。
public class ActivityHelper extends Activity {
ArrayList<String> classes = new ArrayList<String>();
public void addClass (){
classes.add("Activity1");
classes.add("Activity2");
classes.add("Activity3");
//etc
}
public String openClass (){
addClass();
Random rand = new Random ();
int crazy = rand.nextInt(classes.size());
String cheese = classes.get(crazy);
classes.remove(cheese);
return cheese;
}
}
// A Method in Activity1 extends ActivityHelper
public void doJob() {
String cheese = openClass();
try {
@SuppressWarnings("rawtypes")
Class ourClass = Class.forName("com.activity.dan." + cheese);
Intent ourIntent = new Intent(Activity1.this, ourClass);
startActivity(ourIntent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
该程序完美地遍历了类,但我的问题是classes.remove(cheese);
不起作用。我希望一旦打开类,它将从ArrayList中删除,如果在另一个类上调用doJob();
方法,则不会再次使用它。我尝试使用静态并将删除列表放在Activity1
中,但似乎没有任何效果。我们将不胜感激。
答案 0 :(得分:1)
我猜您的remove
正在运行,但您创建的每个Activity
都包含classes
的新实例,而这不是您想要的。它可能会这样工作。
public class ActivityHelper extends Activity{
static ArrayList<String> classes = new ArrayList<String>();
static {
classes.add("Activity1");
classes.add("Activity2");
classes.add("Activity3");
//etc
}
public String openClass (){
// don't add classes here - would be done every time.
// print out some debug
Log.d("ActivityHelper", "State before openClass: " + Arrays.toString(classes.toArray()));
Random rand = new Random ();
int crazy = rand.nextInt(classes.size());
String cheese = classes.get(crazy);
classes.remove(crazy);
// print out some debug
Log.d("ActivityHelper", "State after openClass: " + Arrays.toString(classes.toArray()));
return cheese;
}
答案 1 :(得分:0)
ArrayList.remove()需要一个Integer,而不是一个类。 使用要删除的整数索引调用.remove(),它应该按预期工作。