[英]Can we make element global in android
我在用
<Chronometer android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/chrono"
android:visibility="gone" />
在我的一个活动中,我现在的问题是我可以将其所有活动都设置为全局活动,以便可以在Android应用程序中将其显示给每个活动吗?
如果是,那么该怎么做,请举个例子,因为我是android新手?
这是我的计时器代码
Chronometer stopWatch;
stopWatch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener(){
@Override
public void onChronometerTick(Chronometer arg0) {
countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
long min = countUp / 60;
long sec = countUp % 60;
String minStr = "";
String secStr="";
if(min < 10)
{
minStr = "0"+min;
}
else
{
minStr = ""+min;
}
if(sec<10)
{
secStr = "0"+sec;
}
else
{
secStr = ""+sec;
}
// String asText = (countUp / 60) + ":" + (countUp % 60);
String asText = minStr + ":" + secStr;
textGoesHere.setText(asText);
}
});
stopWatch.start();
这是一个主意。 为您的Chronometer
创建一个单独的布局,并在所有需要计时器的布局中<include />
。
现在,您可以使用Singleton模式或SharedPreferences
来存储属性,例如计时器的开始时间 , 当前状态 (已暂停,正在运行,已停止,重置)。 每当您开始新的活动时,请获取计时器的状态并将其显示在计时器上。
例如,如果当前状态正在运行,则您可能必须启动一个线程来更新计时器,或者如果计时器已停止,则只需从SharedPreference
或Singleton
类中获取开始时间和停止时间 ,然后在计时器上显示它即可。
例如,请考虑以下情形。 为了简单起见,我们有2个活动, ActivityA和ActivityB 。
现在这是您的计时器的某些状态,您的状态可能会有所不同。
您将需要其他几个参数,例如,
System.currentTimeInMillis()
减去此时间可让您过去) 让我们考虑这种情况。 您正在从ActivityA启动计时器,并希望保留ActivityB上的状态。 这是您可能想要做的事情。
当您通过任何事件启动计时器(例如单击按钮)时,必须将开始时间保存在SharedPreference
。
现在你要导航到ActivityB,那么你必须定时器状态保存到SharedPreference
中onStop()
你ActivityA的方法。
现在,在启动ActivityB
,在onResume()
方法中,从SharedPreference
获取起始时间 , System.currentTimeInMillis()
减去起始时间将为您提供经过的时间。 接下来,您必须从SharedPreference
获取计时器状态 。
如果状态运行 ,那么你必须启动一个线程来更新计时器。 如果计时器已停止 ,则足以显示计时器所经过的时间。
这是解决方案的概述。 您可以从此处了解SharedPreferences
。
另外,您需要熟悉“活动”生命周期,您可以从此处学习。
不,你不能。
活动在Android中有一个生命周期:创建,开始,显示和执行任务,停止并销毁它们。 并且内部的所有观点都遵循这个生命周期。 不要与之抗争,这就是Android的方式,如此好,学习生命周期 。
活动的视图不存在于该视图之外。 这没有任何意义。 您应该阅读如何将信息从一项活动传递到另一项活动 。
另外,也许您的问题是:我的所有活动如何在布局中具有相同的视图,每个活动都有其自己的视图实例。 在这种情况下,请使用include xml关键字 。
是的,您可以做到这一点,但不能使其全球化。 这有点棘手。
您需要做的是:-在每个Activity中使用标记对Chronometer xml进行声明。 -在基类中使用该计时器。
就像一个例子:我在每个活动中都需要标头,但是我只想在一个地方进行编码。 所以我要做的是:
/**
* Method to init Header components sets header bar title and header bar
* buttons. This method sets onClickListener to
*/
private void initHeader() throws InvalidHeaderTitleException {
try {
View headerView = findViewById(R.id.header_layout);
if (headerView != null) {
headerTextView = (TextView) headerView
.findViewById(R.id.layout_header_textview_header);
nextHeaderButton = (Button) headerView
.findViewById(R.id.layout_header_button_next);
prevHeaderButton = (Button) headerView
.findViewById(R.id.layout_header_button_previous);
if (headerTextView != null) {
String title = getHeaderText();
if (isValidString(title)) {
if (title.length() > IDryIceUIConstants.LENGTH_HEADER_TEXT)
title = title.substring(0,
IDryIceUIConstants.LENGTH_HEADER_TEXT)
+ IDryIceUIConstants.SUFFIX_HEADER_TEXT;
headerTextView.setText(title);
} else {
throw new InvalidHeaderTitleException(title);
}
}
if (nextHeaderButton != null) {
nextHeaderButton.setVisibility(getVisibility());
nextHeaderButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
headerNextButtonClicked();
}
});
}
if (prevHeaderButton != null) {
prevHeaderButton.setVisibility(getVisibility());
prevHeaderButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
headerPrevButtonClicked();
}
});
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
每个Activity xml中的xml声明是
<include
android:id="@+id/header_layout"
android:layout_width="fill_parent"
android:layout_height="40dip"
layout="@layout/layout_header" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.