这是我的问题,我的主视图只显示一个按钮,按此按钮会显示另一个视图。此视图只有另一个按钮,当按下此按钮时,此当前视图完成,控件返回上一个视图。
为了显示我使用startActivityForResult的第二个视图,我把代码放在这里。
private void startNewview() {
Intent it = new Intent(getApplicationContext(), newView.class);
startActivityForResult(it,VIEW_ID);
}
调用的视图只有一个按钮事件,这里是代码
Button b = (Button) findViewById(R.id.close);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setResult(RESULT_OK);
finish();
}
});
最后,主视图中的onActivityResult方法,这里是代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == VIEW_ID && resultCode == RESULT_OK) {
tv = (TextView) findViewById(R.id.tv);
tv.setText("The result ok is here :)");
}
}
问题是resultCode总是0 = RESULT_CANCELED而且我不知道如何解决它,有人可以帮助我吗?
非常感谢!
答案 0 :(得分:8)
这里,
@Override
public void onBackPressed() {
setResult(Activity.RESULT_OK);
finish();
}
按BACK按钮确实返回(RESULT_OK)。不要打电话
super.onBackPressed()
。
答案 1 :(得分:6)
我无法解释您的代码中发生了什么,但我有一个项目示例来执行此操作..
一个FooActivity,只需一个按钮btnFoo:
@Override
protected void onStart() {
super.onStart();
btnFoo.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent("xper.activity.ACTIVITY_BAR_INTENT"),1);
}
});
}
并在AndroidManifest.xml中添加了一个BarActivity,如下所示:
<activity
android:name = "BarActivity">
<intent-filter>
<action
android:name = "xper.activity.ACTIVITY_BAR_INTENT"/>
<category
android:name = "android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
检索栏内意图的相应代码位于btnBar(Button)的onClicEvent中:
@Override
protected void onStart() {
super.onStart();
btnBar.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("xper.activity.ACTIVITY_BAR_RESULT_INTENT");
intent.putExtra("codBar", "bar");
setResult(Activity.RESULT_OK, intent);
finish();
}
});
}
现在,如果您没有很好地处理onActivityResult()事件,当您按下Android按钮“BACK”时,您可能会收到错误。
如果活动B中的意图(意图)是向活动A提供一些信息,如果按回按钮,我不知道活动B是否在堆栈中,但意图不是'完成了。所以我做了以下事情:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
//Intent intent = new Intent("xper.activity.ACTIVITY_BAR_RESULT_INTENT");
//intent.putExtra("codBar", "bar");
//setResult(Activity.RESULT_CANCELED, intent);
setResult(Activity.RESULT_CANCELED);
finish();
}
处理我在onActivityResult()事件中执行以下操作的信息,以查看条形图活动中检索到的信息:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null) {
Toast.makeText(this, "BAR\trequestCode == " + requestCode + "\tresultCode == " + resultCode + "\tdata == " + data, 10000).show();
btnFoo.setText("BAR\trequestCode == " + requestCode + "\tresultCode == " + resultCode + "\tdata == " + data /*+ "extras == " + data.getExtras().getString("codBar")*/);
} else {
Toast.makeText(this, "BAR\trequestCode == " + requestCode + "\tresultCode == " + resultCode, 10000).show();
btnFoo.setText("BAR\trequestCode == " + requestCode + "\tresultCode == " + resultCode);
}
}
如果您有更多活动将信息返回到父活动,那么请做好以下工作:
//put private static final int globals atributes with the respective name of the
//activity to represent the requestCode for each activity you have like:
private static final int ACTIVITY1 = 117;
private static final int ACTIVITY2 = 118;
...
private static final int ACTIVITYN = 215;
//In the event onActivityResult() is better use the switch statement to handle each
//specific activity to catch information
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_CANCELED) return; // breaks
//if you decide to handle some information of Activity.RESULT_CANCELED
//ignore the above condition that returns and handle it inside the switch statement
switch(requestCode) {
case ACTIVITY1:
{
//Dosomething
} break;
case ACTIVITY2:
{
//Dosomething
} break;
...
case ACTIVITYN:
{
//Dosomething
} break;
}
}
如果你不能做这个示例代码.. 请给我发电子邮件给我发送FooBarActivity项目
答案 2 :(得分:-1)
使用此
Intent returnIntent = new Intent();
setResult(RESULT_OK,returnIntent);
而不是
setResult(RESULT_OK);
仅