我有 main_activity ,可以通过Timer
启动子Activity
。
我知道我们在Intent
中调用的方法getStringExtra(string)
或getBooleanExtra(string)
等;但他们都是onActivityResult
原始数据......
如何从子活动中获取用户定义的类中的对象?
谢谢,这是我的第一个问题! :)有点太晚了......
答案 0 :(得分:1)
您正在寻找Parcelable
。
更简单但非最佳的解决方案是Serializable
。
段:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
用法:
// Sender class
MyParcelable mp = new MyParcelable();
intent.putExtra("KEY_PARCEL", mp);
// Receiver class
Bundle data = getIntent().getExtras();
MyParcelable student = (Myparcelable)data.getParcelable("KEY_PARCEL");
Here's一个有效的例子。
编辑:以下是如何使用片段进行操作。
// Receiver class
Bundle data = getIntent().getExtras();
public class MyFragment extends Fragment {
public static MyFragment newInstance(int index, Bundle data) {
MyFragment f = new MyFragment();
data.putInt("index", index);
f.setArguments(data);
return f;
}
}
// In the fragment
Bundle data = getArguments();
答案 1 :(得分:1)
您可以创建Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
string subpath = "UserProfile";
Directory.CreateDirectory(subpath);
// Set filter for file extension and default file extension
dlg.DefaultExt = ".jpg";
dlg.Filter = "jpeg Files (*.jpg)|*.jpg";
// Display OpenFileDialog by calling ShowDialog method
if (dlg.ShowDialog() == true)
{
string fileName = "pic" + txtEmployeeID.Text + ".jpg";
string newPath = "\\" + subpath + "\\" + fileName;
if (File.Exists(Directory.GetCurrentDirectory() + "\\" + newPath))
{
imgUser.Source = null;
File.Delete(Directory.GetCurrentDirectory() + newPath);
}
File.Copy(dlg.FileName.ToString(), Directory.GetCurrentDirectory() + "\\" + newPath);
ImageSource imageSrc = BitmapFromUri(new Uri(Directory.GetCurrentDirectory() + newPath));
imgUser.Source = imageSrc;
}
public static ImageSource BitmapFromUri(Uri source)
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = source;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
return bitmap;
}
自定义对象。
Parcelable
像这样添加意图
public class Student implements Parcelable{
然后得到像
这样的对象intent.putExtra("student", obj);
答案 2 :(得分:0)
有这个网站可以从您的自定义类中生成Parselabel类.... swweeeeeet! http://www.parcelabler.com/