从ArrayList中删除对象

时间:2012-03-12 13:14:40

标签: java android

您好,我对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中,但似乎没有任何效果。我们将不胜感激。

2 个答案:

答案 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(),它应该按预期工作。