将接口放在bundle中以启动新活动

时间:2016-01-13 18:52:30

标签: android android-activity interface android-bundle

我需要从2个不同的屏幕开始一个活动,这个屏幕有两个不同的模型但是,这两个模型都有一些共享信息,这是我在新活动中需要的信息。问题是我无法使这些模型从同一父模型扩展,因为其中一个模型已经扩展了一个父模型。我已经考虑过创建一个包含共享方法的接口,但是,如果我这样做,那么如何将该接口放入开始下一个活动所需的包中?

我添加了一些简化代码以澄清我的情况:

public class A extends Model implements CustomInterface {
    String name;
    String address;

    public String getName(){
        return name;
    }

    public String getAddress() {
        return address;
    }
}

public class B implements CustomInterface {
    String name;

    public String getName() {
        return name;
    }
}

public interface CustomInterface {
    String getName();
}

我的问题是我需要使用包含两个模型之间共享信息的包启动活动。所以,我想把CustomInterface放在一个包中。我怎么能这样做?

提前致谢。

2 个答案:

答案 0 :(得分:15)

  

所以,我想把CustomInterface放在一个包

您可以让CustomInterface延长Parcelable。 E.g。

 public interface CustomInterface extends Parcelable {
     String getName();
 }

这样实现CustomInterface的类必须实现Parcelable接口中定义的方法。如果正确实现,您将能够毫无问题地传递这些对象

答案 1 :(得分:0)

创建一个单例类,然后您可以在不传递数据的情况下共享数据:

public class MySingleton
{
    private static MySingleton instance;

    public String customVar;

    public static MySingleton getInstance()
    {
        if (instance == null)
        {
            // Create the instance
            instance = new MySingleton();
        }
        // Return the instance
        return instance;
    }

    private MySingleton()
    {
        // Constructor hidden because this is a singleton
    }

    public void getSomeData()
    {
        return something;
    }

    public void getSomeOtherData()
    {
        return somethingelse;
    }
}

然后在你的课程中:

public class A extends Model {
    String name;
    String address;

    public String getName(){
        return name;
    }

    public String getAddress() {
        return address;
    }

    public String doSomethingWithSharedData(){
         MySingleton model = MySingleton.getInstance();
         String somedata = model.getSomeData();
    }
}

public class B {
    String name;


    public String getName() {
        return name;
    }

    public String doSomethingDifferentWithSharedData(){
         MySingleton model = MySingleton.getInstance();
         String somedata = model.getSomeOtherData();
    }
}