-2

3つのクラスA、B、Cがあります。クラスAはクラスBを呼び出してstartActivityForResult、そこからデータを取得します。返された後は、クラス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();
        }
4

1 に答える 1

0

これで、この回答はAndroid用のMonoになりますが、通常のAndroidにも適用できます。

私は3つの非常に単純なアクティビティを作成しました。ActivityAActivityBおよび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ものを表示します。次に、のデータを使用してから戻りたい場合は、次のようにします。rowIdActivityAActivityBActivityA

var result = new Intent();
result.PutExtra("ActivityBResult", "myResult");
SetResult(Result.Ok, result);
Finish();

ActivityAこのデータは、のOnActivityResultメソッドlook inでフェッチできますcase 1。これは、開始時にRequestCode設定したものです。それから私は始めます:StartActivityForResultActivityBActivityC

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が開始されます。私がデータを返すのと同じ方法ActivityCActivityB

var result = new Intent();
result.PutExtra("ActivityCResult", "some result");
SetResult(Result.Ok, result);
Finish();

これは、上記case 2のに戻ってジャンプします。switchOnActivityResult

于 2013-03-24T14:51:33.197 に答える