Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android:如何不断更新/传递值从一个活动到另一个活动?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_450_1@
我正在为一个活动制作一个自定义倒计时器,当我切换活动时,我很难不断更新该值.每次我更改活动时,我只能使用一次该值.

例:

活动A – > B(屏幕上认为0,用户将值更新为10)

B – > A – > (10屏幕上,用户更新值为10)

B – > A – > (屏幕上35,用户更新值为9000)等

但是,一旦用户设置了一个时间,它应该不断地更新它并将其计数.

我可以通过Runnable更新屏幕后面的值并打印出控制台上的值,但我不知道为什么它不会经常将值传递回上一个活动A,(所以它是最新的)然后当用户返回B时,将A传递回B.

我应该注意,当我尝试仅在run()而不是updatetiR_684_11845@erButton()中更新额外内容时,屏幕上没有任何内容发生变化,认值就在那里,但在场景之后值正在更新(控制台).

这是我有的:

public class CustomTimer extends Activity {

    private final Handler handler = new Handler();

    privatE intent intent;
    private Button timerButton;
    private EditText hourValue,minuteValue;

    private long startTime = 0L;
    private long timeInMilliseconds = 0L;
    private long timeSwapBuff = 0L;
    private long updatedTime = 0L;

    @Override
    public void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);
        setContentView(R.layout.activity_custom_timer);

        intent = geTintent();
        hourValue = (EditText) findViewById(R.id.hour_value);
        minuteValue = (EditText) findViewById(R.id.minute_value);
        timerButton = (Button) findViewById(R.id.start_timer_button);

        //avoid grabbing values from hour and minute if they were not passed for some reason
        if(intent.getStringExtra("hourValue") != null)
            hourValue.setText(geTintent().getStringExtra("hourValue"));
        if(intent.getStringExtra("minuteValue") != null)
            minuteValue.setText(geTintent().getStringExtra("minuteValue"));

        setUpHourValue();
        setUpminuteValue();
        setUpTimerButton();
    }

    private void setUpHourValue(){

        hourValue.setOnEditOractionListener(new TextView.onEditOractionListener() {
            @Override
            public Boolean onEditOraction(TextView v,int actionId,KeyEvent event) {
                hourValue.setText(v.getText().toString());
                return false;
            }
        });
    }

    private void setUpminuteValue(){

        minuteValue.setOnEditOractionListener(new TextView.onEditOractionListener() {
            @Override
            public Boolean onEditOraction(TextView v,KeyEvent event) {
                minuteValue.setText(v.getText().toString());
                return false;
            }
        });
    }

    private void setUpTimerButton(){

        timerButton.setOnClickListener(new View.onClickListener() {

            public void onClick(View view) {

                String hourTime = hourValue.getText().toString();
                String minuteTime = minuteValue.getText().toString();

                //only start the timer if it is not zero
                if (!hourTime.equals("00") || !minuteTime.equals("00")) {
                    System.out.println("starTing runnable");
                    startTime = SystemClock.uptimeMillis();
                    handler.postDelayed(updatetiR_684_11845@erThread,0);
                }
                else{
                    System.out.println("time is default\t" + hourTime + "  : " + minuteTime + "************");
                }

                //send the time values BACk to main
                //this does not constantly update the values,it only updates it once
                intent.putExtra("hourValue",hourTimE);
                intent.putExtra("minuteValue",minuteTimE);
                setResult(RESULT_OK,intent);
                finish();//go BACk to the prevIoUs page
            }
        });
    }

    privatE intent getOuterClassIntent(){
        return intent;
    }

    private Runnable updatetiR_684_11845@erThread = new Runnable() {

        //update the time on the screen and constantly pass the values BACk to main
        public void run() {

            String hourTime = hourValue.getText().toString();
            String minuteTime = minuteValue.getText().toString();

            timeInMilliseconds = SystemClock.uptimeMillis() - startTime;

            updatedTime = timeSwapBuff + timeInMilliseconds;

            int secs = (int) (updatedTime / 1000);
            int mins = secs / 60;
            int hour = mins / 60;
            secs = secs % 60;

            //update the time on screen
            hourValue.setText(Integer.toString(Integer.parseInt(hourTimE) - hour));
            minuteValue.setText(Integer.toString(Integer.parseInt(minuteTimE) - secs));

            System.out.println("updating time in runnable");
            System.out.println(hourValue.getText().toString()+ " : " + minuteValue.getText().toString());

            //pass the values BACk to main,but this does NOTHING if I comment out the prevIoUs putExtras (abovE)
            getOuterClassIntent().putExtra("hourValue",hourTimE);
            getOuterClassIntent().putExtra("minuteValue",minuteTimE);
            setResult(RESULT_OK,getOuterClassIntent());

            handler.postDelayed(this,0);
        }
    };
}

解决方法

如果您需要在多个活动之间共享数据,则它们不应归任何一个活动所有.创建一个服务,让两个活动在启动时绑定到它,并在需要知道值时查询服务(通过Binder).所有更新值都应在服务中进行.
@H_696_31@

大佬总结

以上是大佬教程为你收集整理的Android:如何不断更新/传递值从一个活动到另一个活动?全部内容,希望文章能够帮你解决Android:如何不断更新/传递值从一个活动到另一个活动?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。