簡體   English   中英

從Android活動B調用活動A方法

[英]Call activity A method from Activity B Android

我是Java和android的新手。 我正在開發自己的應用程序,但是在將方法從活動A傳遞到活動B時遇到問題。

這是我所做的:

ActivityA具有Demo()方法。

public class ActivityA extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

  }

  protected void demo() {
    // Do something    
  }
}

我創建了以下類以將ActivityA的方法訪問ActivityB:

public class External {
    private ActivityA activitya;
    private static External instance = null;

    public External(ActivityA activitya) {
        this.activitya = activitya;
    }

    static public External getInstance(ActivityA activitya) {
        if (instance == null) {
            instance = new MyntraExternal(activitya);
            return instance;
        } else {
            return instance;
        }
      }
   }

現在如何進一步進行? 我在從ActivityB獲取ActivityA中的方法時遇到很多問題。 請任何人幫助。

編輯:

ActivityB是我的啟動器類,我想從ActivityB中的ActivityA方法中進行一些訪問。 該怎么辦 ?

由於您是Android的新手,所以我會告訴您,從活動A到B調用方法是一種不好的做法,反之亦然,您可以使用Intent和Bundle將參數從一個活動傳遞到另一個活動,以及是否需要從第二個活動傳遞參數首先,您需要使用重寫方法onActivityResults

以下是一些有用的鏈接,有關將參數從一個活動傳遞到另一個活動: https : //www.dev2qa.com/passing-data-between-activities-android-tutorial/在此鏈接中,您可以看到一個工作原理的示例。

希望能幫助到你。

--EDIT(如果需要在創建時更改A中的某些內容,則需要從B到A調用函數,這是最好,最簡單的方法):

在活動B中:

Intent intent = new Intent(this, ActivityA.class);
intent.putExtra("Work","doJump");
startActivity(intent);

在活動A:onCreate中:

String extra = getIntent().getStringExtra("Work");
if(extra != null && extra.equals("doJump")){
  jump();
}

使該方法成為公共和靜態方法,然后使用類名對其進行訪問。 例如,在您的第二個活動中,使用ActivityB.demo()

嘗試使用startActivityForResult

從活動A開始活動B

    startActivityForResult(intent, SOME_CODE)

要返回結果,您將需要在活動A中添加以下代碼

   override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when(code){
            SOME_CODE -> if (resultCode == Activity.RESULT_OK) doSomething()
        }
    }

要告訴活動A調用方法,可以在活動B中說:

        setResult(Activity.RESULT_OK)
        finish()

B完成后,將執行A中的onActivityResult

要返回A而不執行“ doSomething()”方法,

        setResult(Activity.RESULT_CANCELED)
        finish()

請嘗試這種方式

public class ActivityA extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }

  public void demo() {
    // Do something    
  }
}

public class ActivityB extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActivityA activityA = new ActivityA();  // create object
    activityA.demo();  // 
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM