2013-03-24 53 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