我想从一个来自库的类中调用结果的活动。 我有主项目说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
此外,我试图在main.java中放置onActivityResult,但它还没有被调用
内部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>
感谢您阅读任何有用的建议
答案 0 :(得分:0)
注意,在变量中存储对Activity的引用可能会导致意外问题,因为Android可以随时销毁活动(释放内存)。
相反,您可以直接从第二个活动调用startActivityForResult(),获取结果,然后使用广播接收器通知您的第一个活动。
答案 1 :(得分:0)
MiddleWareStart扩展了Activity但你没有把它作为一个活动启动,因此它不在“活动堆栈”中,也不能作为调用活动。因此例外。如果你调用a.StartActivityForResult - a是调用活动,因此将调用onActivityResult。希望有所帮助。