0

我正在开发一个应用程序,其中有一个带有 4 个按钮的仪表板。每个按钮都会为不同的 Activity 启动一个新的 Intent。每个 Activity 都会扩展包含自定义视图的相同布局。在自定义视图中是一个 ViewPager。在 ViewPager 中,我想显示一个驻留在上述活动数组中的字符串。我应该将这些数组传递给自定义视图并将其显示在 ViewPager 中吗?如果是这样,我怎样才能通过它们?自定义视图如何知道它们来自哪个活动?我知道“发件人”活动将是当前正在运行的活动,但我该如何检查呢?或者我应该让数组静态并轻松访问它们?在这种情况下,我还需要知道要访问哪个活动。请告知,或者也许有更好的方法来实现它。谢谢你。

4

1 回答 1

0

Intents 允许您启动其他活动,还允许您将原语、原语数组/列表以及自定义Parcelable对象传递给其他活动。

您可以在此处传递数组数据、启动活动名称等。或者您可以使用getCallingActivity()来了解发件人活动。

更新:

onCreate()如果您在自定义视图类中有设置方法,则可以将数据传递给自定义视图。

对于更复杂的通信,将您的活动连接到其子视图,如下所示:

界面:

public interface CustomViewParent {
    //----add as many communication methods you want---
    public String[] getData();
    public void doSomething();
}

活动:

public class MyActivity extends Activity implements CustomViewParent {

// ------------------------ INTERFACE METHODS ------------------------


// --------------------- Interface CustomViewParent ---------------------

    @Override
    public String[] getData() {
        return new String[]{"data1","data2"};
    }

    @Override
    public void doSomething() {
        Toast.makeText(this,"Custom view called me !",Toast.LENGTH_SHORT).show();
    }

// -------------------------- OTHER METHODS --------------------------

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //----here we set the parent--
        ((CustomView)findViewById(R.id.my_custom_view)).setParent(this);
    }
}

在自定义视图中接受并使用此接口:

public class CustomView extends ViewPager {
// ------------------------------ FIELDS ------------------------------

    private CustomViewParent parent;

// --------------------------- CONSTRUCTORS ---------------------------

    public CustomView(Context context) {
        super(context);
        init();
    }

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

// --------------------- GETTER / SETTER METHODS ---------------------

    public void setParent(CustomViewParent parent) {
        this.parent = parent;
    }

// ---------------------------- INITIALIZE-----------------------------
    private void init() {
    //-----initialize/inflate custom views-----

    //-----calls to parent, !! do not forget the null check !! ----
        if(parent != null){
            String[] data = parent.getData();

            parent.doSomething();
        }

    //----add data from parent to Views etc---

    }
}
于 2012-09-04T06:23:06.120 回答