从库中开始结果活动

时间:2011-12-12 23:17:59

标签: java android

我想从一个来自库的类中调用结果的活动。 我有主项目说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>

感谢您阅读任何有用的建议

2 个答案:

答案 0 :(得分:0)

注意,在变量中存储对Activity的引用可能会导致意外问题,因为Android可以随时销毁活动(释放内存)。

相反,您可以直接从第二个活动调用startActivityForResult(),获取结果,然后使用广播接收器通知您的第一个活动。

答案 1 :(得分:0)

MiddleWareStart扩展了Activity但你没有把它作为一个活动启动,因此它不在“活动堆栈”中,也不能作为调用活动。因此例外。如果你调用a.StartActivityForResult - a是调用活动,因此将调用onActivityResult。希望有所帮助。