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