Tom*_*pee 9 c# android android-activity xamarin
我有一些自定义对象,如RootObject和Form我要传递到下一个活动.
这是一个例子RootObject:
public class RootObject
{
public Form Form { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是我如何通过a传递RootObject到下一个活动并在下一个中Intent获取它Activity?在Form这里也有拥有多个物业Lists及的东西,我需要访问一些属性在我的下一个Activity.我的意图是这样的:
saveButton.Click += delegate {
if(ValidateScreen()){
SaveData();
Intent intent = new Intent(this, typeof(MainActivity));
Bundle b = new Bundle();
b.PutSerializable("RootObject", RootObject);
StartActivity(intent);
}
};
Run Code Online (Sandbox Code Playgroud)
Nut*_*ker 27
我知道这是一个老问题,但我认为我的回答可能对某人有所帮助.我做的是我使用了可以使用Nuget Manager安装的JSON.Net软件包.通过使用JSON,您可以在第一个活动中序列化对象,然后在第二个活动中反序列化.我就这样做了:
活动1
using Newtonsoft.Json;
...
void mBtnSignIn_Click(object sender,EventArgs e)
{
User user = new User();
user.Name = "John";
user.Password = "password";
Intent intent = new Intent(this,typeof(Activity2));
intent.PutExtra("User",JsonConvert.SerializeObject(user));
this.StartActivity(intent);
this.Finish();
}
Run Code Online (Sandbox Code Playgroud)
活动2
using Newtonsoft.Json;
...
private User user;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Activity2);
user = JsonConvert.DeserializeObject<User>(Intent.GetStringExtra("User"));
}
Run Code Online (Sandbox Code Playgroud)
希望这会对某人有所帮助.
har*_*ash 10
这就是你如何去做.您的类需要实现Serializable或Parcelable.在第一个活动中(您要从中发送):
final Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("my_class", your_object);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
然后在你的第二个Activity中你会做:
final Intent passedIntent = getIntent();
final YourClass my_class = (YourClass) passedIntent.getSerializableExtra("my_class");
Run Code Online (Sandbox Code Playgroud)
还有另一种方法,使用Bundles ::
从您的类创建一个Bundle,如:
public Bundle toBundle() {
Bundle b = new Bundle();
b.putString("SomeKey", "SomeValue");
return b;
}
Run Code Online (Sandbox Code Playgroud)
然后使用INTENT传递此包.现在,您可以通过传递bundle来重新创建类对象
public CustomClass(Context _context, Bundle b) {
context = _context;
classMember = b.getString("SomeKey");
}
Run Code Online (Sandbox Code Playgroud)
好吧,就我而言,我想传递的对象不了解 Android 或 IOS,没有类似的东西。所以实现(Java 版本)ISerializableorIParcelable不是一个选项。
所以,我所做的是采用 JSON(使用Newtonsoft.JsonNuGet 包)方法并使用扩展方法。
public static class IntentExtension
{
public static Intent PutExtra<TExtra>(this Intent intent, string name, TExtra extra)
{
var json = JsonConvert.SerializeObject(extra);
intent.PutExtra(name, json);
return intent;
}
public static TExtra GetExtra<TExtra>(this Intent intent, string name)
{
var json = intent.GetStringExtra(name);
if (string.IsNullOrWhiteSpace(json))
{
return default(TExtra);
}
return JsonConvert.DeserializeObject<TExtra>(json);
}
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
// Put extra
MyDto dto = ...; // Get from server or something
StartActivity(new Intent(this, typeof(MyActivity)).PutExtra("MY_EXTRA", dto))
// Get the extra back
var myDto = Intent.GetExtra<MyDto>("MY_EXTRA");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23782 次 |
| 最近记录: |