我们有3个类A,B,C。类A使用startActivityForResult
调用B类来从中获取数据。返回后,它取决于从B类中检索的数据,是否我们将转到C类以获取数据到A类。这将在onListItemClick
方法中完成。
以下代码不起作用任何人都可以告诉问题是什么?
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor note = mDbHelper.fetchNote(id);
startManagingCursor(note);
mpass= note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_PASS));
theid = id
if(mpass !=null) {
Intent ps = new Intent(this, EnterPass.class);
startActivityForResult(ps,2);
}
else {
Intent i = new Intent(this, NoteEdit.class);
i.putExtra(NotesDbAdapter.KEY_ROWID, id);
startActivityForResult(i, 1);}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if(requestCode==2) {
if(null!=intent) {
message=intent.getStringExtra("MESSAGE");
if (mpass == message) {
Intent i = new Intent(this, NoteEdit.class);
i.putExtra(NotesDbAdapter.KEY_ROWID, theid);
startActivityForResult(i, 1);
}
}
else
}
if(requestCode==1) {
if (resultCode == RESULT_OK)
fillData();
}
答案 0 :(得分:0)
现在,这个答案将采用Mono for Android,但它仍适用于常规Android。
我创建了3个非常简单的活动。 ActivityA
,ActivityB
和ActivityC
。
在ActivityA
中,我通过致电:
ActivityB
var intent = new Intent(this, typeof (ActivityB));
intent.PutExtra("RowId", rowId);
StartActivityForResult(intent, 1);
其中rowId
是列表的位置。您可以通过在Intent
中添加更多内容来轻松传递更多信息。
在ActivityB
中,您可以获取所有信息并随意执行任何操作:
var data = Intent.GetStringExtra("RowId");
var textView = FindViewById<TextView>(Resource.Id.textView1);
textView.Text = data;
我只是将其放在TextView
中,以显示从rowId
传递的ActivityA
。然后当我想从ActivityB
返回ActivityA
的一些数据时,我会这样做:
var result = new Intent();
result.PutExtra("ActivityBResult", "myResult");
SetResult(Result.Ok, result);
Finish();
这些数据可以ActivityA
的{{1}}方法查看OnActivityResult
,这是我在case 1
时设置的RequestCode
已开始StartActivityForResult
。然后我开始ActivityB
:
ActivityC
与启动protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode != Result.Ok) return;
switch (requestCode)
{
case 1:
{
var activityBData = data.GetStringExtra("ActivityBResult");
_textView1.Text = activityBData;
//Some logic here based on data from ActivityB
var intent = new Intent(this, typeof(ActivityC));
intent.PutExtra("ActivityBResult", activityBData);
StartActivityForResult(intent, 2);
}
break;
case 2:
{
var activityCData = data.GetStringExtra("ActivityCResult");
_textView2.Text = activityCData;
}
break;
}
}
的方式相同,启动ActivityB
。我从ActivityC
返回数据的方式与我ActivityC
的方式相同:
ActivityB
返回并跳转到上方var result = new Intent();
result.PutExtra("ActivityCResult", "some result");
SetResult(Result.Ok, result);
Finish();
中case 2
的{{1}}。