【问题标题】:How to call a non-static method in MainActivity from SecondActivity?如何从 SecondActivity 调用 MainActivity 中的非静态方法?
【发布时间】:2017-05-21 17:25:14
【问题描述】:
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() (它必须是非静态的)。我错在哪里?我能做什么?

【问题讨论】:

  • 事情是;当向 MainActivity 调用 Intent 或创建新实例时,使用非静态会重置数据。
  • 我该怎么办?
  • 如果您想将数据保留在目标活动中,即使意图指向它,请使用静态方法和引用
  • 这是一个非常糟糕的主意。使用意图。
  • 你需要将MainActivity.list移动到一个单独的类中......静态变量在Android活动中经常出错

标签: java android static non-static


【解决方案1】:

在单独的类中使用此方法

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

public static void randomizareImagini(上下文上下文)

之后改变这一行

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(this);

【讨论】:

  • 如何将其调用到我的 MainActivity 中? SeparationClass.randomizareImagini(应该写什么参数?);
  • 如果你是从 MainActivity randomizareImagini(MainActivity.this);如果你是从 SecondActivity randomizareImagini(SecondActivity.this);
【解决方案2】:

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

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

【讨论】:

  • 永远不要创建new Activity 类。这是针对 Android 特定问题的错误解决方案,仅适用于普通 Java 对象
  • @cricket_007 哦,好吧。我对安卓一无所知。感谢您提供信息。
  • SecondClass 不是活动。我像普通类一样使用来计算事物。所以我可以使用 new ,对吗?
  • @Paul 那为什么是SecondClass extends AppCompatActivity
  • 对不起,我不知道那部分是做什么的,我从 MainActivity 复制了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多