Java 我们可以在android中使元素成为全局的吗
我正在使用Java 我们可以在android中使元素成为全局的吗,java,android,timer,Java,Android,Timer,我正在使用 <Chronometer android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/chrono" android:visibility="gone" /> 在我的一项活动中,我现在的问题是,我是否可以将其设置为所有活动的全局,以便在我的android应用程序中向每个活动显示其价值 如果是,那么如何做到这一点,请给
<Chronometer android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/chrono"
android:visibility="gone" />
在我的一项活动中,我现在的问题是,我是否可以将其设置为所有活动的全局,以便在我的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();
计时秒表;
stopWatch.setOnChronometerTickListener(新的Chronometer.OnChronometerTickListener(){
@凌驾
计时器上的公共空隙(计时器arg0){
countUp=(SystemClock.elapsedRealtime()-arg0.getBase())/1000;
长分钟=倒计时/60;
长秒=倒计时%60;
字符串minStr=“”;
字符串secStr=“”;
如果(最小值<10)
{
minStr=“0”+分钟;
}
其他的
{
minStr=“”+分钟;
}
如果(秒否,则不能
在Android中,活动有一个生命周期:它们被创建、启动、显示和做事情、停止和销毁。其中的所有视图都遵循这个生命周期。
不要与之抗争,Android就是这样,它就是这样,学习
活动的视图不存在于活动之外。这没有任何意义。您应该继续阅读
另外,您的问题可能是:我的所有活动如何在其布局中具有相同的视图,每个活动都有自己的视图实例。在这种情况下,请使用。这里有一个想法。为您的计时器创建单独的布局,并在所有需要计时器的布局中使用
它
现在,您可以使用模式或SharedReferences
来存储计时器的属性,例如开始时间,当前状态(暂停、运行、停止、重置)。每当启动新活动时,获取计时器的状态并在计时器上显示
例如,如果当前状态正在运行,则可能需要启动线程来更新计时器,或者如果计时器已停止,则只需从SharedReference
或Singleton
类获取开始时间和停止时间,并在计时器上显示
例如,考虑下面的场景。为了简单起见,我们有2个活动:<强> Actuvia和<强> ActuviyB<强>
现在这里是一些状态为您的计时器,您的可能是不同的
准备就绪(00:00-您的计时器已准备好运行)
正在运行(计时器正在运行)
暂停(计时器已暂停,可以恢复)
已停止(您已停止计时器,它显示经过的时间,下一个可能的状态为1,即就绪。)
您还需要几个其他参数,例如
计时器开始时间(System.currentTimeInMillis()
减去此时间即为已用时间)
计时器停止时间(用于计算计时器暂停和停止时间)
让我们考虑一下这个例子。您正在从<强> Actuvia中启动计时器,并希望在<强> ActuviyB<强>中保留状态。这里有一组您可能想做的事情。
当您通过任何事件启动计时器时(比如单击按钮),您必须将启动时间保存在SharedReference
中
现在您要导航到ActivityB,那么您必须将计时器状态保存到ActivityA
的onStop()
方法中的SharedReference
现在,在启动ActivityB
之后,在onResume()
方法中,从SharedReference
获取启动时间,即System.currentTimeInMillis()
减去开始时间将给出经过的时间。接下来,您必须从共享参考
获取计时器状态
如果该状态正在运行,则必须启动一个线程来更新计时器。如果计时器已停止,则足以显示计时器上经过的时间
这是解决方案的概要。您可以从中了解SharedReferences
此外,您还需要熟悉活动生命周期,您可以从中学习。是的,您可以做到这一点,但不能使其全球化。这有点棘手
你要做的是:
-在每个活动中使用标记创建choronometer 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();
}
}
每个活动中的xml声明都是xml
<include
android:id="@+id/header_layout"
android:layout_width="fill_parent"
android:layout_height="40dip"
layout="@layout/layout_header" />
我正在使用秒表计时,我想在每个活动上显示秒表,现在我无法使其全球化,那么如何在每个活动上仅使用一个计时器显示秒表??您如何实现计时器?它们是异步任务吗?您是否使用报警管理器?我们需要更多代码来回答第二个问题。谢谢您的回答,可以吗请给我举个例子,我对这项技术是新的??很好,你只需要分离模型和视图,即使问题没有。谢谢Deepika,那么计时器的侦听器呢?我想在每个活动中读取它的值,但计时器应该只有一个??然后在基类中声明一个受保护的方法来获取计时器的值。set lis在每个活动中,当用户单击chronometer时,它将调用基类中的受保护方法,该方法将返回chronometer的值。