簡體   English   中英

從庫開始結果的活動

[英]Start activity for result from library

我想為來自library引用的類的結果調用一個活動。 我有一個主項目說p1,另一個項目說p2作為庫添加到p1,在p2內部我有一個類:MiddleWareStart,從中我想調用一個屬於p2的活動:DeviceListActivity我試圖從MiddleWareStart使用startActivityForResult但是它不起作用並導致運行時錯誤,因此在嘗試對MiddleWareStart進行以下操作時,我嘗試將p1的主要活動設置為:

MiddleWareStart x=new MiddleWareStart(mainActivity.this);

在MiddleWareStart內部,我將Activity a放置在構造函數中:

public MiddleWareStart(Activity activity)
{
this.a=activity;
Intent intent=new Intent(a,DeviceListActivity.class);   
a.startActivityForResult(intent,1);

}

現在它可以正常工作,並且啟動了DeviceListActivity.java活動,但是從未調用過在MiddleWareStart內部實現的Activity Result上的問題。 我已經在調用的活動(DeviceListActivity)中聲明了集合Resullt。 當我嘗試啟動p2本身(而不是p1)時,每個想法都可以按預期正確運行,並且在Activity Result上需要以下代碼:

在p1內部的mainActivity(GameActivity)中

MiddleWareStart x=new (GameActivity.this);

在MiddleWareStart內部(在p2內部)

public class MiddleWareStart extends Activity
{

Activity a;
public MiddleWareStart(Activity activity)
{  

 this.a=activity;
 Intent intent=new Intent(a,DeviceListActivity.class);
 a.startActivityForResult(intent,1);
 Toast.makeText(this,"Check toast",5).show();  
}


public void onActivityResult(int requestCode, int resultCode, Intent data) {    

    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case 1:
             Toast.makeText(this,"inside on activity result",5).show();         
        if (resultCode == Activity.RESULT_OK) {
            Toast.makeText(this,"ok",5).show(); 
             }
    break;
    case2:----
    }
  }
}

輸出僅顯示Check toast

我也嘗試將onActivityResult放在main.java中,但是它還沒有被調用

在DeviceListActivity內部:

Intent intent = new Intent();
        intent.putExtra(EXTRA_DEVICE_ADDRESS, address);

        // Set result and finish this Activity
        setResult(Activity.RESULT_OK, intent);

這是我的主項目清單文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.android.tictactoe.library"
  android:versionCode="1"
  android:versionName="1.0"
   android:name="com.example.GlobalState">
<uses-sdk android:minSdkVersion="8" />   
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/tie" 
     android:name="com.example.GlobalState">
    <activity android:name=".GameActivity"
              android:label="@string/tie">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.example.DeviceListActivity"
              android:label="@string/select_device"

              android:configChanges="orientation|keyboardHidden" >

    </activity>
    <activity android:name="com.example.MiddleWareStart"
              android:label="@string/select_device"                  
              android:configChanges="orientation|keyboardHidden" >

    </activity>
</application>

這是庫項目的清單:

  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk minSdkVersion="6" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WRITE_GSERVICES"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"></uses-permission>


<application android:label="@string/app_name"

              >
    <activity android:name=".MiddleWareStart"
              android:label="@string/app_name"
              android:configChanges="orientation|keyboardHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".com.example.DeviceListActivity"
              android:label="@string/select_device"

              android:configChanges="orientation|keyboardHidden" />
</application>

感謝您閱讀任何建議將是有益的

請注意,在變量中存儲對Activity的引用可能會導致意外問題,因為Android會在需要時銷毀該活動(釋放內存)。

相反,您可以直接從第二個活動中調用startActivityForResult(),獲取結果,然后使用廣播接收器通知您的第一個活動。

MiddleWareStart擴展了Activity,但您沒有將其作為活動啟動,因此它不在“活動堆棧”中,並且不能充當調用活動。 因此,例外。 如果您調用a.StartActivityForResult-a是調用活動,因此將調用a的onActivityResult。 希望能有所幫助。

暫無
暫無

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

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