【问题标题】:How do I transfer data from one activity to another in Android Studio? [duplicate]如何在 Android Studio 中将数据从一个活动传输到另一个活动? [复制]
【发布时间】:2022-01-25 09:43:55
【问题描述】:

我正在创建番茄钟应用程序。它有 2 个活动:

  • 第一个是首页。

  • 第二个是设置时间。

  • 我想做第三个最近的活动

我想创建第三个活动,它从第二个活动中获取输入时间并将它们存储在一个列表中,但我不知道如何将输入数据从第二个活动传输到第三个?

活动一:


import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button newTime = findViewById(R.id.newTime);
        Button currentTime = findViewById(R.id.currentTime);
        Button recents = findViewById(R.id.recentTime);

        newTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent activity2Intent = new Intent(getApplicationContext(), Activity2.class);
                startActivity(activity2Intent);
                overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
            }

        });

//        currentTime.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Intent currentActivityIntent = new Intent(getApplicationContext(), currentActivity.class);
//                startActivity(currentActivityIntent);
//                overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
//            }
//        });



    }
}

活动二:

package com.example.pomotimer;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import java.util.Locale;

public class Activity2 extends AppCompatActivity {



    private TextView TextViewCountdown;
    private Button Button_Start_Pause;
    private Button Reset;
    private Button buttonSet;
    private Button select_Time;
    private EditText edit_Text_Input;


    private CountDownTimer countDownTimer;
    public long mStartTimeinMillis;
    private long timeLeft = mStartTimeinMillis;

    private boolean timerRunning;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);

        TextViewCountdown = findViewById(R.id.textViewCount);
        Button_Start_Pause = findViewById(R.id.bnStartPause);
        Reset = findViewById(R.id.reset);
        select_Time = findViewById(R.id.selectTime);
        edit_Text_Input = findViewById(R.id.edit_Text_Input);
        buttonSet = findViewById(R.id.buttonSet);


        select_Time.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                edit_Text_Input.setVisibility(View.VISIBLE);
                buttonSet.setVisibility(View.VISIBLE);

                buttonSet.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String input = edit_Text_Input.getText().toString();
                        if (input.length() == 0){
                            Toast.makeText(Activity2.this, "Field can't be empty", Toast.LENGTH_SHORT).show();
                            return;
                        }
                        long millisInput = Long.parseLong(input)*60000;
                        if (millisInput == 0){
                            Toast.makeText(Activity2.this, "Timer cannot be set to 0", Toast.LENGTH_SHORT).show();
                            return;
                        }

                        setTime(millisInput);
                        edit_Text_Input.setText("");
//                        Intent res = new Intent(getApplicationContext(), currentActivity.class);
//                        startActivityForResult(res, (int) millisInput, null);
                    }


                });


            }




        });





        Button_Start_Pause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (timerRunning){
                    pauseTimer();
                }

                else{
                    startTimer();
                }
            }
        });

        Reset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                resetTimer();
            }
        });
        int minutes = (int) (timeLeft/1000)/60;
        int seconds = (int) (timeLeft/1000)%60;

        String timeLeftFormatted = String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
        TextViewCountdown.setText(timeLeftFormatted);


    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
    }

    public void setTime(long milliseconds){
         mStartTimeinMillis = milliseconds;
         resetTimer();

    }

    private void startTimer(){
        countDownTimer = new CountDownTimer(timeLeft,1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                // The countdown timer has an automatic method of reducing time by 1s
                    timeLeft = millisUntilFinished;

                    int minutes = (int) (timeLeft/1000)/60;
                    int seconds = (int) (timeLeft/1000)%60;

                    String timeLeftFormatted = String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
                    TextViewCountdown.setText(timeLeftFormatted);

            }

            @Override
            public void onFinish() {
                timerRunning = false;
                Button_Start_Pause.setText("Start");
                Button_Start_Pause.setVisibility(View.INVISIBLE);

            }
        }.start();

        timerRunning = true;
        Button_Start_Pause.setText("pause");

    }

    private void pauseTimer(){
        countDownTimer.cancel();
        timerRunning = false;
        Button_Start_Pause.setText("Start");

    }

    private void resetTimer(){
            timeLeft = mStartTimeinMillis;
        int minutes = (int) (timeLeft/1000)/60;
        int seconds = (int) (timeLeft/1000)%60;
        Button_Start_Pause.setVisibility(View.VISIBLE);

        String timeLeftFormatted = String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
        TextViewCountdown.setText(timeLeftFormatted);
    }

    @Override
    protected void onStop() {
        super.onStop();

        SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putLong("millisleft", timeLeft);
        editor.putBoolean("timerRunning", timerRunning);

        editor.apply();

    }

    @Override
    protected void onStart() {
        super.onStart();

        SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
        timeLeft = prefs.getLong("millisleft",mStartTimeinMillis);
        timerRunning = prefs.getBoolean("timeRunning", false);

        int minutes = (int) (timeLeft/1000)/60;
        int seconds = (int) (timeLeft/1000)%60;

        String timeLeftFormatted = String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
        TextViewCountdown.setText(timeLeftFormatted);

    }



}

【问题讨论】:

标签: java android android-studio android-activity


【解决方案1】:

我们可以使用 Intent 将数据传递给另一个活动。

就像在 startActivity 之前我们需要做的: intent.putExtra("数据", 数据);

在 thirdActivity onCreate 我们需要做 intent.getStringExtra("数据");

【讨论】:

    【解决方案2】:

    内部Activity2

    您可以将数据直接放在Intent 中,也可以将它们放在Bundle 中,然后将它们放在Intent 中。避免同时使用两者以保持一致性。

      Intent activity3Intent = new Intent(getApplicationContext(), Activity3.class);
      //Direct Intent approach
      activity3Intent.putExtras("YOUR_STRING_KEY","YOUR_DATA");
      //OR Bundle approach
      Bundle bundle = new Bundle();
      bundle.putString("YOUR_STRING_KEY","YOUR_DATA");
      activity3Intent.putExtras(bundle);
      startActivity(activity3Intent);
    

    Activity3 类中。

    //if direct intent approach
    String value = getIntent.getStringExtra("YOUR_STRING_KEY") 
    //If bundle approach was used.
    String value = getIntent().getExtras().getString("YOUR_STRING_KEY");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      相关资源
      最近更新 更多