如何通过对象到一个新的活动? (如何注入) [英] How to pass object to a new Activity? (how to inject)

查看:106
本文介绍了如何通过对象到一个新的活动? (如何注入)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想传递一个对象(不是数据!)来实现一些接口(例如IConnect的)到一个新的活动。 活动将调用这个对象的一些方法来获取数据。

如何做到这一点? (序列化和Parcelable是对象/数据/结构我想,不为对象/界面,做的东西)。

我应该传递一个类名的意图演员?然后活动将创建所需的对象? 如何注入对象(几个不同的类,它实现的IConnect)到一个新的活动?

解决方案

MyParcelable.java

 公共类MyParcelable实现Parcelable {

    私人字符串MVAL;

    公共MyParcelable(字符串VAL){
        MVAL = VAL;
    }

    公共静态最终Parcelable.Creator< MyParcelable> CREATOR =
        新Parcelable.Creator< MyParcelable>(){
        公共MyParcelable createFromParcel(包裹中){
            字符串s = in.readString();
            返回新MyParcelable(S);
        }

        公共MyParcelable [] newArray(INT尺寸){
            返回新MyParcelable【尺寸】;
        }
    };

    公共字符串的getValue(){
        返回MVAL;
    }

    公共无效writeToParcel(地块P){
        p.writeString(MVAL);
    }

    公共字符串的toString(){
        返回MyParcelable [VAL =+ MVAL +];
    }

}
 


SendParcelable.java

 公共类SendParcelable延伸活动{
    @覆盖
    公共无效的onCreate(包冰柱){
        super.onCreate(冰柱);
        意向意图=新的意图(这一点,ReceiveParcelable.class);
        Parcelable P =新MyParcelable(测试);
        intent.putExtra(myparcelable,p)的;
        Log.i(ParcelDemo,发送Parcelable);
        startActivity(意向);
    }
}
 


ReceiveParcelable.java

 公共类ReceiveParcelable延伸活动{
    @覆盖
    公共无效的onCreate(包冰柱){
      super.onCreate(冰柱);
      意向意图= getIntent();
       Parcelable p值= intent.getParcelableExtra(myparcelable);
        Log.i(ParcelDemo,得到Parcelable+ P);
        如果(P = NULL和放大器;!&放,P的instanceof MyParcelable和放大器;&安培;
            ((MyParcelable)P).getValue()。等于(测试)){
            Log.i(ParcelDemo,成功!);
        } 其他 {
            Log.i(ParcelDemo,失败!);
        }
    }
}
 


希望这有助于!

I want to pass an object (not data!) that implements some interface (ex. IConnect ) to a new Activity. Activity will call some methods from this object to acquire data.

How to do that? (Serializable and Parcelable are for objects/data/structures i guess, not for objects/interfaces that 'DO' something).

Should I pass a class name in Intent extras? and then Activity will create desired object? How to inject an object (a few different classes that implements IConnect) to a new Activity ?

解决方案

MyParcelable.java

public class MyParcelable implements Parcelable { 

    private String mVal; 

    public MyParcelable(String val) { 
        mVal = val; 
    } 

    public static final Parcelable.Creator<MyParcelable> CREATOR = 
        new Parcelable.Creator<MyParcelable>() { 
        public MyParcelable createFromParcel(Parcel in) { 
            String s = in.readString(); 
            return new MyParcelable(s); 
        } 

        public MyParcelable[] newArray(int size) { 
            return new MyParcelable[size]; 
        } 
    }; 

    public String getValue() { 
        return mVal; 
    } 

    public void writeToParcel(Parcel p) { 
        p.writeString(mVal); 
    } 

    public String toString() { 
        return "MyParcelable[val=" + mVal + "]"; 
    } 

} 


SendParcelable.java

public class SendParcelable extends Activity { 
    @Override 
    public void onCreate(Bundle icicle) { 
        super.onCreate(icicle); 
        Intent intent = new Intent(this, ReceiveParcelable.class); 
        Parcelable p = new MyParcelable("test"); 
        intent.putExtra("myparcelable", p); 
        Log.i("ParcelDemo", "Sending Parcelable"); 
        startActivity(intent); 
    } 
} 


ReceiveParcelable.java

public class ReceiveParcelable extends Activity { 
    @Override 
    public void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      Intent intent = getIntent(); 
       Parcelable p = intent.getParcelableExtra("myparcelable"); 
        Log.i("ParcelDemo", "Got Parcelable " + p); 
        if (p != null && p instanceof MyParcelable && 
            ((MyParcelable) p).getValue().equals("test")) { 
            Log.i("ParcelDemo", "Success!"); 
        } else { 
            Log.i("ParcelDemo", "Failure!"); 
        } 
    } 
} 


Hope this helps!

这篇关于如何通过对象到一个新的活动? (如何注入)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆