结果不活动的活动

时间:2013-03-24 12:41:59

标签: android android-activity

我们有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();
        }

1 个答案:

答案 0 :(得分:0)

现在,这个答案将采用Mono for Android,但它仍适用于常规Android。

我创建了3个非常简单的活动。 ActivityAActivityBActivityC

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}}。