[英]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.