簡體   English   中英

不為startActivityForResult調用onActivityResult

[英]onActivityResult isn't called for startActivityForResult

我有一個MainActivity,帶有帶有“設置”項的選項菜單。

當我啟動SettingsActivity ,一切正常,直到我單擊保存按鈕並嘗試完成SettingsActivity為止。 該活動結束,但它似乎也關閉了父活動。 我正在Eclipse中進行這項工作。 Eclipse表示某些內容仍在運行,因為它允許我單擊“停止”按鈕。 我確實在MainActivity運行了一個計時器線程,但是我在沒有該線程的情況下對此進行了測試,並且它仍然沒有返回到onActivityResult()

我以這種方式啟動SettingsActivity:

public static final int ACTIVITY_CREATE = 1;

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.settings:
            try {
                Intent intent = new Intent(this, SettingsActivity.class);
                startActivityForResult(intent, ACTIVITY_CREATE);
            }
            catch (Exception e) {
                Log.e(TAG, e.getMessage());
                finish();
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

我期望SettingsActivity中的finish()可以使我使用此功能,但事實並非如此。 我在這里設置了一個斷點,但它永遠不會到達這里:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    switch (requestCode) {
        case (ACTIVITY_CREATE): {
            if (resultCode == RESULT_OK) {
            }
            break;
       }
    }
}

這是簡單的SettingsActivity:

    public class SettingsActivity extends Activity implements View.OnClickListener {
    private Button save;

    @Override
        public void onCreate(Bundle b) {
            super.onCreate(b);
            setContentView(R.layout.settings);
            save = (Button) findViewById(R.id.save);
            save.setOnClickListener(this);
            return;
        }

    @Override
        public void onClick(View v) {

            switch (v.getId()) {
                case R.id.save:
                    Intent intent = new Intent();
                    intent.putExtra("ip", ipText.getText().toString());
                    setResult(RESULT_OK, intent);
                    finish();
                    break;

                default:
                    break;
            }

            return;
        }
}                              // public class SettingsActivity extends Activity {

主要活動的launchMode設置為“標准”。

我的問題是為什么我在調用活動中不回到onActivityResult()?

謝謝,鮑勃

這是清單文件:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.MyStuff"
      android:versionCode="1"
      android:versionName="1.0">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity 
            android:name=".CTNet" 
            android:label="@string/app_name" 
            android:screenOrientation = "fullSensor"
            android:configChanges = "orientation|screenSize|keyboardHidden"   
            android:launchMode="singleTask"
        >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>




        <activity
            android:name=".SettingsActivity"
        >

        </activity>

    </application>

    <uses-sdk android:minSdkVersion="8" />                             <!-- after targetSdkVersion -->

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

    <uses-feature android:glEsVersion="0x00020000" android:required="true" />

</manifest>

嘗試在此處添加詳細的logcat:

    06-30 12:18:58.292: I/System.out(16197): Sending WAIT chunk
06-30 12:18:58.292: W/ActivityThread(16197): Application com.MyStuff is waiting for the debugger on port 8100...
06-30 12:18:58.300: I/dalvikvm(16197): Debugger is active
06-30 12:18:58.495: I/System.out(16197): Debugger has connected
06-30 12:18:58.495: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:58.698: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:58.901: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.097: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.300: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.503: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.706: I/System.out(16197): waiting for debugger to settle...
06-30 12:18:59.901: I/System.out(16197): waiting for debugger to settle...
06-30 12:19:00.104: I/System.out(16197): waiting for debugger to settle...
06-30 12:19:00.307: I/System.out(16197): waiting for debugger to settle...
06-30 12:19:00.511: I/System.out(16197): debugger has settled (1476)
06-30 12:19:00.722: D/SOV(16197): MainActivity::onCreate
06-30 12:19:01.003: D/CTNet(16197): creating view
06-30 12:19:01.003: D/CTNet(16197): view created
06-30 12:19:01.065: I/System.out(16197): CTNet: starting
06-30 12:19:01.128: I/System.out(16197): BMA254 Acceleration Sensor
06-30 12:19:01.128: I/System.out(16197):    vendor = Bosch Sensortec
06-30 12:19:01.128: I/System.out(16197):    version = 42602
06-30 12:19:01.128: I/System.out(16197):    maximum range = 19.613300
06-30 12:19:01.136: I/System.out(16197):    min delay = 10000
06-30 12:19:01.136: I/System.out(16197):    power = 0.130000
06-30 12:19:01.136: I/System.out(16197):    resolution = 0.038307
06-30 12:19:01.136: I/System.out(16197):    type = 1
06-30 12:19:01.136: I/System.out(16197): MS-3E (YAS530) Magnetic Sensor
06-30 12:19:01.136: I/System.out(16197):    vendor = Yamaha Corporation
06-30 12:19:01.143: I/System.out(16197):    version = 42602
06-30 12:19:01.143: I/System.out(16197):    maximum range = 800.000000
06-30 12:19:01.143: I/System.out(16197):    min delay = 10000
06-30 12:19:01.143: I/System.out(16197):    power = 4.000000
06-30 12:19:01.143: I/System.out(16197):    resolution = 0.300000
06-30 12:19:01.143: I/System.out(16197):    type = 2
06-30 12:19:01.151: I/System.out(16197): MS-x Orientation Sensor
06-30 12:19:01.151: I/System.out(16197):    vendor = Yamaha Corporation
06-30 12:19:01.151: I/System.out(16197):    version = 42602
06-30 12:19:01.151: I/System.out(16197):    maximum range = 360.000000
06-30 12:19:01.151: I/System.out(16197):    min delay = 10000
06-30 12:19:01.151: I/System.out(16197):    power = 0.000000
06-30 12:19:01.151: I/System.out(16197):    resolution = 1.000000
06-30 12:19:01.151: I/System.out(16197):    type = 3
06-30 12:19:01.151: I/System.out(16197): AL3201 Light Sensor
06-30 12:19:01.151: I/System.out(16197):    vendor = LITEON
06-30 12:19:01.151: I/System.out(16197):    version = 42602
06-30 12:19:01.159: I/System.out(16197):    maximum range = 0.000000
06-30 12:19:01.159: I/System.out(16197):    min delay = 0
06-30 12:19:01.159: I/System.out(16197):    power = 0.000000
06-30 12:19:01.159: I/System.out(16197):    resolution = 0.000000
06-30 12:19:01.159: I/System.out(16197):    type = 5
06-30 12:19:01.159: I/System.out(16197): Auto Rotation Sensor
06-30 12:19:01.159: I/System.out(16197):    vendor = Samsung Electronics
06-30 12:19:01.159: I/System.out(16197):    version = 1
06-30 12:19:01.159: I/System.out(16197):    maximum range = 255.000000
06-30 12:19:01.159: I/System.out(16197):    min delay = 0
06-30 12:19:01.167: I/System.out(16197):    power = 0.000000
06-30 12:19:01.167: I/System.out(16197):    resolution = 0.000000
06-30 12:19:01.167: I/System.out(16197):    type = 15
06-30 12:19:01.167: E/SensorManager(16197): thread start
06-30 12:19:01.167: D/SensorManager(16197): registerListener :: handle = 1  name= BMA254 Acceleration Sensor delay= 200000  
06-30 12:19:01.253: D/CTNet(16197): onStart
06-30 12:19:01.261: D/CTNet(16197): onResume
06-30 12:19:01.487: D/SV(16197): surfaceCreated
06-30 12:19:01.487: D/SV(16197): surfaceChanged
06-30 12:19:08.190: W/Choreographer(16197): Already have a pending vsync event.  There should only be one at a time.
06-30 12:19:08.222: D/CTNet(16197): onPause
06-30 12:19:08.245: D/SensorManager(16197): unregisterListener::  
06-30 12:19:08.245: D/Sensors(16197): Remain listener = Sending .. normal delay 200ms
06-30 12:19:08.245: I/Sensors(16197): sendDelay --- 200000000
06-30 12:19:08.245: D/SensorManager(16197): JNI - sendDelay
06-30 12:19:08.245: I/SensorManager(16197): Set normal delay = true
06-30 12:19:08.323: E/ViewRootImpl(16197): sendUserActionEvent() mView == null
06-30 12:19:08.487: D/settings(16197): 192.168.1.200
06-30 12:19:08.487: D/settings(16197): 9072
06-30 12:19:08.979: D/SV(16197): surfaceDestroyed
06-30 12:19:09.089: D/CTNet(16197): onStop
06-30 12:19:10.682: D/settings(16197): save clicked
06-30 12:19:10.729: W/Choreographer(16197): Already have a pending vsync event.  There should only be one at a time.
06-30 12:19:10.948: W/IInputConnectionWrapper(16197): showStatusIcon on inactive InputConnection
06-30 12:19:11.104: D/SOV(16197): MainActivity::onDestroy

我相信是因為launchModeAndroidManifest審查

singleTop一起singleTop

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

[編輯]

進行此更改,並告訴我在設置視圖中點擊時會發生什么。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.settings:
                Intent intent = new Intent(this, SettingsActivity.class);
                startActivityForResult(intent, ACTIVITY_CREATE);
                break;
    }
    return super.onOptionsItemSelected(item);
}

嘗試將mainActivity設置為

        android:launchMode="singleTask"

在您的AndroidManifest中。

嘗試將方法從protected更改為public

我發現了問題。 我在MainActivity的onStop()函數末尾有一個finish()。

暫無
暫無

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

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