Android OnActivityResult()和onnerResult()之间有什么区别?

Android OnActivityResult()和onnerResult()之间有什么区别?,android,onactivityresult,onnewintent,Android,Onactivityresult,Onnewintent,我想让一个应用程序看起来像那张照片 当我单击按钮在子活动上维护活动时, OnActivityResult()和OnneWinEvent()都在MainActivity中调用 我打算调用OnActivityResult()从MenuActivity返回, 并调用OnNewIntent()从subs返回 我通过StartActivityForResult()了解到母亲活动调用孩子活动, 和child调用setResult()以返回。 当我想称之为客观活动的时候, 我了解到需要onNewContent

我想让一个应用程序看起来像那张照片

当我单击按钮在子活动上维护活动时, OnActivityResult()和OnneWinEvent()都在MainActivity中调用

我打算调用OnActivityResult()从MenuActivity返回, 并调用OnNewIntent()从subs返回

我通过StartActivityForResult()了解到母亲活动调用孩子活动, 和child调用setResult()以返回。 当我想称之为客观活动的时候, 我了解到需要onNewContent(),因为目标活动不调用onCrete()

但我想我错了。请告诉我OnActivityResult()和onnerResult()的区别是什么? 我还想知道为什么在setResult()中没有调用setResult的情况下调用OnActivityResult

先谢谢你

MainActivity.java

public class MainActivity extends AppCompatActivity {

EditText editText;
EditText editText2;

public static final int REQUEST_CODE_MENU = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editText = (EditText) findViewById(R.id.editText);
    editText2 = (EditText) findViewById(R.id.editText2);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(editText.getText().toString().length() != 0 &&
                    editText2.getText().toString().length() != 0){
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
                startActivityForResult(intent, REQUEST_CODE_MENU);
            } else {
                Toast.makeText(getApplicationContext(),"ID와 비밀번호를 입력해주세요.", Toast.LENGTH_LONG).show();
            }
        }
    });
}

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



    if (requestCode == REQUEST_CODE_MENU) {
        if (resultCode == RESULT_OK) {
            Toast.makeText(getApplicationContext(), "MenuActivity에서 온 Intent입니다.", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "ERROR :  The value of resultCode is not RESULT_OK", Toast.LENGTH_LONG).show();
        }
    } else if {
        Toast.makeText(getApplicationContext(), "ERROR :  The value of requestCode is not REQUEST_CODE_MENU (100)", Toast.LENGTH_LONG).show();
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Toast.makeText(getApplicationContext(), intent.getStringExtra("from") + "에서 온 Intent입니다.", Toast.LENGTH_LONG).show();
  }
}
public class MenuActivity extends AppCompatActivity {

public static final int REQUEST_CODE_CUSTOM = 200;
public static final int REQUEST_CODE_REVENUE = 300;
public static final int REQUEST_CODE_PRODUCT = 400;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    Button custom = (Button) findViewById(R.id.custom);
    custom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent_cus = new Intent(getApplicationContext(), CustomActivity.class);
            startActivityForResult(intent_cus, REQUEST_CODE_CUSTOM);
        }
    });

    Button revenue = (Button) findViewById(R.id.revenue);
    revenue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent_rev = new Intent(getApplicationContext(), RevenueActivity.class);
            startActivityForResult(intent_rev, REQUEST_CODE_REVENUE);
        }
    });

    Button product = (Button) findViewById(R.id.product);
    product.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent_pro = new Intent(getApplicationContext(), ProductActivity.class);
            startActivityForResult(intent_pro, REQUEST_CODE_PRODUCT);
        }
    });

    Button tologin = (Button) findViewById(R.id.tologin);
    tologin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent_login = new Intent(getApplicationContext(), MainActivity.class);
            setResult(RESULT_OK, intent_login);
            finish();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
        case REQUEST_CODE_CUSTOM :
            Toast.makeText(getApplicationContext(), data.getStringExtra("from") + "에서 온 Intent입니다.", Toast.LENGTH_LONG).show(); break;
        case REQUEST_CODE_PRODUCT :
            Toast.makeText(getApplicationContext(), data.getStringExtra("from") + "에서 온 Intent입니다.", Toast.LENGTH_LONG).show(); break;
        case REQUEST_CODE_REVENUE :
            Toast.makeText(getApplicationContext(), data.getStringExtra("from") + "에서 온 Intent입니다.", Toast.LENGTH_LONG).show(); break;
        default :
            Toast.makeText(getApplicationContext(), "ERROR occured.", Toast.LENGTH_LONG).show();
    }
  }
}
MenuActivity.java

public class MainActivity extends AppCompatActivity {

EditText editText;
EditText editText2;

public static final int REQUEST_CODE_MENU = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editText = (EditText) findViewById(R.id.editText);
    editText2 = (EditText) findViewById(R.id.editText2);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(editText.getText().toString().length() != 0 &&
                    editText2.getText().toString().length() != 0){
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
                startActivityForResult(intent, REQUEST_CODE_MENU);
            } else {
                Toast.makeText(getApplicationContext(),"ID와 비밀번호를 입력해주세요.", Toast.LENGTH_LONG).show();
            }
        }
    });
}

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



    if (requestCode == REQUEST_CODE_MENU) {
        if (resultCode == RESULT_OK) {
            Toast.makeText(getApplicationContext(), "MenuActivity에서 온 Intent입니다.", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "ERROR :  The value of resultCode is not RESULT_OK", Toast.LENGTH_LONG).show();
        }
    } else if {
        Toast.makeText(getApplicationContext(), "ERROR :  The value of requestCode is not REQUEST_CODE_MENU (100)", Toast.LENGTH_LONG).show();
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Toast.makeText(getApplicationContext(), intent.getStringExtra("from") + "에서 온 Intent입니다.", Toast.LENGTH_LONG).show();
  }
}
public class MenuActivity extends AppCompatActivity {

public static final int REQUEST_CODE_CUSTOM = 200;
public static final int REQUEST_CODE_REVENUE = 300;
public static final int REQUEST_CODE_PRODUCT = 400;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    Button custom = (Button) findViewById(R.id.custom);
    custom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent_cus = new Intent(getApplicationContext(), CustomActivity.class);
            startActivityForResult(intent_cus, REQUEST_CODE_CUSTOM);
        }
    });

    Button revenue = (Button) findViewById(R.id.revenue);
    revenue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent_rev = new Intent(getApplicationContext(), RevenueActivity.class);
            startActivityForResult(intent_rev, REQUEST_CODE_REVENUE);
        }
    });

    Button product = (Button) findViewById(R.id.product);
    product.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent_pro = new Intent(getApplicationContext(), ProductActivity.class);
            startActivityForResult(intent_pro, REQUEST_CODE_PRODUCT);
        }
    });

    Button tologin = (Button) findViewById(R.id.tologin);
    tologin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent_login = new Intent(getApplicationContext(), MainActivity.class);
            setResult(RESULT_OK, intent_login);
            finish();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
        case REQUEST_CODE_CUSTOM :
            Toast.makeText(getApplicationContext(), data.getStringExtra("from") + "에서 온 Intent입니다.", Toast.LENGTH_LONG).show(); break;
        case REQUEST_CODE_PRODUCT :
            Toast.makeText(getApplicationContext(), data.getStringExtra("from") + "에서 온 Intent입니다.", Toast.LENGTH_LONG).show(); break;
        case REQUEST_CODE_REVENUE :
            Toast.makeText(getApplicationContext(), data.getStringExtra("from") + "에서 온 Intent입니다.", Toast.LENGTH_LONG).show(); break;
        default :
            Toast.makeText(getApplicationContext(), "ERROR occured.", Toast.LENGTH_LONG).show();
    }
  }
}
CustomActivity.java (子活动之一,其代码与其他子活动完全相同)


从文件中可以看出:

对于在其包中将launchMode设置为“singleTop”的活动,或者如果客户端在调用startActivity(Intent)时使用了标志_ACTIVITY _SINGLE _TOP标志,则会调用此函数。在这两种情况下,当在活动堆栈顶部重新启动活动而不是启动活动的新实例时,将在现有实例上调用onNewIntent(),其目的是重新启动活动

所以,如果您仔细阅读它,
onNewIntent()
总是会在同一活动实例获得新意图时被触发。在您的情况下,您正在发送一个结果\u OK intent,因此,
onNewIntent()
最终将收到它


每当您从父活动发出
startActivityForResult()
调用时,父活动将等待结果,父活动将返回前台的时间,即使我们没有将任何结果发送回活动,也将调用onActivityResult并发送结果\u取消的响应代码。这条链条就是这样设计的

简言之,onNewIntent()用于任何活动的意图

OnActivityResult()返回由startActivityForResult()启动的意图的结果。