如何从SecondActivity中调用MainActivity中的非静态方法?

时间:2017-05-21 17:25:15

标签: java android static non-static

public class SecondClass extends AppCompatActivity{

public void randomizareImagini(){

    int[] rndInt = new int[20];
    int[] id= new int[20];
    String[] imgName = new String[20];
    Random rand = new Random();
    int[] ar1 = new int[20];

    for (int i=1; i<16;i++){
        ar1[i] = rand.nextInt(3) + 1;
        rndInt[i]=ar1[i];
        imgName[i]="img"+rndInt[i];
        id[i] = getResources().getIdentifier(imgName[i], "drawable", getPackageName());
    }

    for (int i=0;i<15;i++){MainActivity.list.get(i).setImageResource(id[i+1]);}

}
}

如何将此方法称为MainActivity(我无法找到它,因为它是非静态的)?如果我把它变成静态的,那么里面的代码就不会使用getResources()(它必须是非静态的)。我错在哪里?我该怎么办?

2 个答案:

答案 0 :(得分:1)

在单独的类中使用此方法

将方法更改为静态和参数添加参数

  

public static void randomizareImagini(Context context)

之后改变这一行

  

id [i] = context.getResources()。getIdentifier(imgName [i],“drawable”,context.getPackageName());

public class SeparateClass {
    public static void randomizareImagini(Context context){

        int[] rndInt = new int[20];
        int[] id= new int[20];
        String[] imgName = new String[20];
        Random rand = new Random();
        int[] ar1 = new int[20];

        for (int i=1; i<16;i++){
            ar1[i] = rand.nextInt(3) + 1;
            rndInt[i]=ar1[i];
            imgName[i]="img"+rndInt[i];
            id[i] = context.getResources().getIdentifier(imgName[i], "drawable", context.getPackageName());
        }

        for (int i=0;i<15;i++){
            MainActivity.list.get(i).setImageResource(id[i+1]);}

    }
}

您可以使用

调用此方法
  

SeparateClass.randomizareImagini(本);

答案 1 :(得分:0)

从技术上讲,如果要调用非静态方法,则需要此类的实例。

SecondClass instance = new SecondClass();
instance.randomizareImagini();