簡體   English   中英

如何在每次單擊Android Studio中的來回切換活動時將值增加一

[英]How to increase the value by one each time i click switching the activity back and forth in Android Studio

我試圖每次單擊按鈕來回切換活動時,將變量count的值增加一。 但是,每次單擊時,計數值仍然相同。 有人可以幫忙嗎?

我正在嘗試放置一些生命周期的android代碼,但仍然沒有任何區別。

package com.darayuth.learning;

import android.content.Context;
import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


import com.squareup.picasso.Picasso;

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.darayuth.learning";
    public static final String TAG = "MainActivity";
    public static final String value = "value";
    private int count = 0;
    private TextView textView;

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putInt(value, count);
        super.onSaveInstanceState(outState);
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        count = savedInstanceState.getInt(value);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView2);


        Button btn = findViewById(R.id.button);

        btn.setOnClickListener((View v)->{
            sendMessage();
        });

    }
    public void sendMessage(){
        count = count + 1;
        Log.i(TAG, "value: " + count);
        Intent intent = new Intent(this, Main2Activity.class);
        EditText editText = findViewById(R.id.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message );
        startActivity(intent);

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="sendMessage"
        android:text="Button" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name" />


</LinearLayout>

activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main2Activity">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

package com.darayuth.learning;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        TextView textView  = findViewById(R.id.textView1);
        textView.setText(message);

    }
}

我建議使用SharedPreferences來存儲和檢索活動之間的值。

private void storeValue(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

    // Store an integer using the Shared Preferences editor
    SharedPreferences.Editor editor = prefs.edit();
    editor.putInt("myPreferenceValueKey", value); // Store the value with a key to identify it
    editor.apply();
}

private void retrieveValue(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    int defaultValue = 0; // This is the value that's returned if the preference doesn't exist

    // Retrieve the stored value using the associated key
    value = prefs.getInt("myPreferenceValueKey", defaultValue);
}

在您的第一個Activity中,只需在onCreate()調用retrieveValue() ,然后在增加值之后但在開始下一個Activity之前調用storeValue()

您可以在第二個Activity中創建相同的函數,以根據需要存儲和檢索值。

您可以在https://developer.android.com/training/data-storage/shared-preferences上了解有關SharedPreferences的更多信息。

我建議您使用帶有靜態變量的類來保存count變量。 並添加一個函數increment()以增加count

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM