将接口打包以启动新的 activity

Put interface in bundle to start a new activity

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

我添加了一些简化的代码以阐明我的情况:

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();
}

我的问题是我需要启动一个 activity 捆绑包,其中包含两个模型之间的共享信息。所以,我想将 CustomInterface 放在一个包中。我该怎么做?

提前致谢。

So, I would like to put CustomInterface in a bundle

你可以让 CustomInterface 扩展 Parcelable。例如

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

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

创建一个单例class,然后不传就可以共享数据了:

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;
    }
}

然后在你的 classes:

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();
    }
}