Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们可以在android中使元素成为全局的吗_Java_Android_Timer - Fatal编程技术网

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的值。