gpt4 book ai didi

java - onActivityResult 没有被触发

转载 作者:行者123 更新时间:2023-12-02 01:27:08 34 4
gpt4 key购买 nike

我有三项 Activity ,A、B 和 C(代码如下)。 A 使用 startActivityforResult 调用 B,并覆盖 onActivityResult,B 也使用 ActivityforResult 调用 C,然后 onActivityResult 将结果返回给 A。我的问题是 onActivityResult 没有被触发。我认为这是因为我正在从 onCreate 之外的函数完成 Activity,但我不知道。

我尝试过寻找其他答案,但没有成功。

我尝试过使用 Intent ,但似乎都不起作用。

MainActivity.java

Button btn = findViewById(R.id.add);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addReminder();
}
});


} //Finish of onCreate

private void addReminder(){
Intent intent = new Intent(this, AddRecActivity.class);
startActivityForResult(intent, RESULT_OK);

public void refresh() {
Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
refresh();
}
}

AddRecActivity.java

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
cursor.moveToPosition(position);
Medicina med = new Medicina(cursor);
Intent intent = new Intent(AddRecActivity.this, RecFinishActivity.class);
intent.putExtra("NAME", med.getName());
intent.putExtra("QUANTITY", med.getQuantity());
intent.putExtra("TYPE", med.getType());
intent.putExtra("PILLS", med.getPills());
startActivityForResult(intent, RESULT_OK);
}
});

}//onCreate end here
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(RESULT_OK == resultCode){
Log.i("Insercion:", "Insercion correcta");
} else {
Log.i("Insercion:", "Insercion fallida");
}
setResult(RESULT_OK);
finish();
}

RecFinishActivity.java

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addRec(data.getString("NAME"), data.getInt("QUANTITY"), data.getString("TYPE"),
data.getInt("PILLS"));
}
});
} //onCreate end here

void addRec(String name, int quantity, String type, int pills){
Consumo con = new Consumo(name, quantity, type, pills, true, Integer.parseInt(min.getText().toString()));
long success = sRegistrosDbHelper.saveConsumo(con);
setResult(RESULT_OK);
finish();
}

RecFinishActivity finish() 正在工作,但 AddRecActivity onResultActivity 未触发,因此此 Activity 未完成,MainActivity 未获取结果。

预期行为:C 完成,B 触发 onResultActivity 并完成,A 触发 onResultActivity 并刷新 Activity。

最佳答案

StartActivityForResult 接受 Intent 和 requestCode 作为参数。您将传递 RESULT_OK 。尝试每次创建一个唯一的代码(可以是任何整数),然后在 onActivityResult 上查找该特定的 requestCode。

Intent i = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(i, 100); //I'm using 100 as a requestCode

如果您想在 ActivityB 上将结果设置为“OK”:

Intent returnIntent = new Intent(); //use this intent if you want to send dat back to the other activity
setResult(Activity.RESULT_OK,returnIntent);
finish();

对此的回答:

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

if (requestCode == 100) {
if(resultCode == Activity.RESULT_OK){
//do something
}
if (resultCode == Activity.RESULT_CANCELED) {
//do something if there's no result
}
}
}

关于java - onActivityResult 没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56750960/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com