2013-03-24 54 views
-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(); 
     } 
+0

發佈代碼塊。 – Mani 2013-03-24 12:43:42

+0

'下面的代碼不工作'代碼在哪裏 – Abubakkar 2013-03-24 12:44:42

+0

SO中的開發人員是普通人,如果沒有適當的細節,代碼,棧跟蹤等,他們沒有超強的自然能力來識別您的問題。 – Pragnani 2013-03-24 12:44:48

回答

0

現在這個答案將在Android的單聲道,但它仍然適用於普通的Android。

我創建了3個非常簡單的活動。 ActivityA,ActivityBActivityC

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顯示從ActivityA通過rowId。然後,當我想從ActivityB一些數據返回ActivityA,我做的:

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

這些數據可以在ActivityAOnActivityResult方法看在case 1,這是我曾在StartActivityForResult時設置的RequestCode中獲取我開始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(); 

它返回並跳入上面OnActivityResultswitchcase 2

+0

不錯,同樣的想法和相同的解決方案這個例子,但我的應用程序從活動B得到的結果後沒有執行下一個指令,去活動C爲什麼! – Salam 2013-03-24 17:38:33

+0

您正將'intent.getStringExtra(「MESSAGE」)'與'mpass'進行比較。你把正確的東西放在你的'ActivityB'中,以便'MESSAGE'的值和'mpass'相同嗎? – Cheesebaron 2013-03-24 18:04:05

+0

是的,我做了,消息和mpass我發現它一樣,但比較它什麼都不執行 – Salam 2013-03-24 18:38:49