我有一个非常有趣的问题。让我强调一下,我没有为 Android 编程太多,看来我可能在某个地方偏离了轨道。
我的问题是事件 onActivityResult() 的触发。我已经阅读了 Xamarin 收据,但不知何故它不起作用。该例程不会在 MainActivity 中被调用。
我什至尝试在 java 上做一个类似的例子,而且效果非常好。
那么,现在进入正题。我有一个 MainActivity,它可以启动 Configuration Activity。此 Activity 应该从服务器收集 IP(用户手动输入),并将字符串返回给 MainActivity。公平而简单。
MainActivity 代码 fragment :
[Activity(Label = "Test", MainLauncher = true, Icon = "@drawable/ax")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
setBindigs();
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
switch (resultCode)
{
case Result.Ok:
//do something
break;
}
}
private void setBindigs()
{
ImageView ax = FindViewById<ImageView>(Resource.Id.ax);
ax.Click += HandleImageClick;
}
private void HandleImageClick(object sender, EventArgs e)
{
var conf = new Intent(this, typeof(Configuration));
StartActivityForResult(conf, Convert.ToInt32(Result.Ok));
}
和配置 fragment :
[Activity(Label = "Configuration")]
public class Configuration : Activity
{
private Button[] Connects;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Configuration);
setBindigs();
}
private void setBindigs()
{
const int KeyboardLength = 2;
Connects = new Button[KeyboardLength];
for (int I = 0; I < KeyboardLength; ++I)
{
Connects[I] = FindViewById<Button>(Resource.Id.ConnectButton + I);
Connects[I].Click += HandleKeyboardClick;
}
}
private void HandleKeyboardClick(object sender, EventArgs e)
{
Button Clicked = sender as Button;
Result ActivityResult = Result.Ok;
String IpText = String.Empty;
switch(Clicked.Id)
{
case Resource.Id.ConnectButton:
EditText IP = FindViewById<EditText>(Resource.Id.ServerIP);
IpText = IP.Text;
break;
case Resource.Id.DisconnectButton:
ActivityResult = Result.Canceled;
break;
}
Intent myIntent = new Intent (this, typeof(MainActivity));
myIntent.PutExtra ("IP", IpText);
SetResult (Result.Ok, myIntent);
Finish();
}
你有什么想法吗?在 Java 中,我使用选项 getIntent();
而不是 Intent myIntent = new Intent (this, typeof(MainActivity));
最佳答案
我刚刚在我的代码中发现了问题。为了将来引用,这似乎是问题所在:
调用 StartActivityForResult()
时,我使用了参数 StartActivityForResult(conf, Convert.ToInt32(Result.Ok));
。似乎预期结果不应作为 Convert.ToInt32(Result.Ok)
传递,而应作为 0 传递。
这解决了我的问题
关于c# - Android OnActivityResult 未被调用(C#、Xamarin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848978/