2017-10-05 127 views
2

我有一个带有TextView(“@ + id/lblAccountHead”)的片段“AddNewIncomeFragment”。点击textview后,它开始一个新的活动“AccountHeadListActivit”,它显示了一个现有账户头的列表。在从“AccountHeadListActivity”中选择账户头部时,我想用选定的账户名称更新第一个活动的“lblAccountHead”,其他值需要保持不变。Xamarin Android - 从另一个活动更新一个活动的UI控件

早些时候我使用“消息中心”为xamarin格式。现在我试图在xamarin native(android)中做同样的事情。

*****用第一溶液应用修订****

在AddNewIncomeFragment点击事件,开始考虑头部活动:开户头活动

public void onAccounyHeadClick(object sender, EventArgs e) 
     { 
       var intend = new Intent(this.Activity, typeof(AccountHeadListActivity)); 
     //this.StartActivity(intend); 
     this.StartActivityForResult(intend, 1000); 
     } 

ListView的选择事件

void OnSelection (object sender, SelectedItemChangedEventArgs e) 
     { 

        var result = new Intent(); 
     result.PutExtra("name", "Salary Account"); 
     result.PutExtra("id", 2); 
     SetResult(Result.Ok, result); 
     Finish(); 
     } 

在结束活动后,我想更新以前活动的textview和选定的帐户头名称/ ID。请分享我们必须在xamarin andriod中执行此操作的选项,并使用StartActivityForResult,Local Notifications或任何最佳方法。


我已经实现了上述解决方案,它工作正常。但问题是 - 第二个活动“AccountHeadList”包含一个添加新帐户链接,它启动一个新的活动“AddNewAccount” - 现在如果用户创建一个新帐户并保存它,那么此活动需要关闭,第一个活动需要新更新创建帐户名称。所以基本上“StartActivityForResult”在涉及三项活动并且需要从第三项活动更新第一项活动时失败 - 请建议。


感谢,

@保罗

+0

而不是使用finish()关闭第三个活动,您可以启动第一个活动并通过一个包中的意图传递所需的数据,然后在oncreate()方法中可以从包中获取数据如果存在。 – Ogbe

回答

3

要接收结果,称 startActivityForResult()而不是startActivity()

然后在您的第二个活动,叫setResult(result)方法来设置结果在您完成活动finish()之后,在您的原始活动中,您可以覆盖方法

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent  data) { 
     // set the text view with the data from the result 
    } 
+0

谢谢,你建议的解决方案工作正常(我已经用应用解决方案更新了这个问题)。但是当它需要更新来自第三活动的第一活动时会出现问题,请参阅更新的问题以获取详细信息。 –

+0

你的第三项活动是直接打开你的第一项活动,还是必须经过第二项活动? – Ogbe

+0

第一次活动打开第二次活动是项目列表,如果需要项目不可用,则在第二次活动中添加新按钮打开第三次活动添加新项目。添加项目后,新项目将显示在第一个活动中。 –

相关问题