在Android中从儿童活动中获取对象

时间:2015-06-28 05:51:37

标签: android

我有 main_activity ,可以通过Timer启动子Activity

我知道我们在Intent中调用的方法getStringExtra(string)getBooleanExtra(string)等;但他们都是onActivityResult原始数据...... 如何从子活动中获取用户定义的类中的对象?

谢谢,这是我的第一个问题! :)有点太晚了......

3 个答案:

答案 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/