簡體   English   中英

從一種活動轉移到另一種活動時,如何保持editText輸入?

[英]How to keep editText inputs when moving from one activity to another?

我的一項活動中有一堆EditTexts。 它們在屏幕上可見,用戶可以鍵入它們。 用戶還可以移動到另一個完全不同的屏幕。 但是,當前,如果他/她使用EditTexts返回活動,則他/她的輸入將不再顯示在[first]屏幕上。

我可以使用什么代碼將用戶輸入保留在第一個屏幕/第一個活動的EditText中?

提前致謝。

編輯(僅更新代碼)

package com.example.owner.introductoryapplication;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class UserDataInputActivity extends AppCompatActivity
{
    String[] genderOptions = {"Male", "Female"};

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_user_data_input);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.select_dialog_singlechoice, genderOptions);
        AutoCompleteTextView acTextView = (AutoCompleteTextView) findViewById(R.id.GenderPromptValue);
        acTextView.setThreshold(1);
        acTextView.setAdapter(adapter);
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState)
    {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putString("Agestr",(((EditText) findViewById(R.id.AgePromptValue)).getText().toString()));
        savedInstanceState.putString("Speedstr",(((EditText) findViewById(R.id.GaitSpeedPromptValue)).getText().toString()));
        savedInstanceState.putString("Weightstr",(((EditText) findViewById(R.id.WeightPromptValue)).getText().toString()));
        savedInstanceState.putString("Heightstr",(((EditText) findViewById(R.id.HeightPromptValue)).getText().toString()));
        savedInstanceState.putString("Genderstr",(((EditText) findViewById(R.id.HeightPromptValue)).getText().toString()));
        savedInstanceState.putString("UPDRSstr",(((EditText) findViewById(R.id.UPDRSPromptValue)).getText().toString()));
        savedInstanceState.putString("TUAGstr",(((EditText) findViewById(R.id.TUAGPromptValue)).getText().toString()));
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState)
    {
        super.onRestoreInstanceState(savedInstanceState);
        ((EditText) findViewById(R.id.AgePromptValue)).setText(savedInstanceState.getString("Agestr"), TextView.BufferType.EDITABLE);
        ((EditText) findViewById(R.id.GaitSpeedPromptValue)).setText(savedInstanceState.getString("Speedstr"), TextView.BufferType.EDITABLE);
        ((EditText) findViewById(R.id.WeightPromptValue)).setText(savedInstanceState.getString("Weightstr"), TextView.BufferType.EDITABLE);
        ((EditText) findViewById(R.id.HeightPromptValue)).setText(savedInstanceState.getString("Heightstr"), TextView.BufferType.EDITABLE);
        ((EditText) findViewById(R.id.HeightPromptValue)).setText(savedInstanceState.getString("Genderstr"), TextView.BufferType.EDITABLE);
        ((EditText) findViewById(R.id.UPDRSPromptValue)).setText(savedInstanceState.getString("UPDRSstr"), TextView.BufferType.EDITABLE);
        ((EditText) findViewById(R.id.TUAGPromptValue)).setText(savedInstanceState.getString("TUAGstr"), TextView.BufferType.EDITABLE);
    }

    public void onGenericMenuClick(View v)
    {
        Intent intent = null;

        ArrayList<String> inputStrings = new ArrayList<>();
        inputStrings.add((((EditText) findViewById(R.id.AgePromptValue)).getText().toString()));
        inputStrings.add((((EditText) findViewById(R.id.GaitSpeedPromptValue)).getText().toString()));
        inputStrings.add((((EditText) findViewById(R.id.WeightPromptValue)).getText().toString()));
        inputStrings.add((((EditText) findViewById(R.id.HeightPromptValue)).getText().toString()));
        if(((EditText) findViewById(R.id.GenderPromptValue)).getText().toString().equals("Male"))
            inputStrings.add("1");
        else //(((EditText) findViewById(R.id.GenderPromptValue)).getText().toString() == "Female")
            inputStrings.add("2");
        inputStrings.add((((EditText) findViewById(R.id.UPDRSPromptValue)).getText().toString()));
        inputStrings.add((((EditText) findViewById(R.id.TUAGPromptValue)).getText().toString()));

        // if you click info buttons (even if the EditTexts are blank) show the Dialogs
        if(v.getId() == R.id.gaitInfoButton || v.getId() == R.id.UPDRSInfoButton || v.getId() == R.id.TUAGInfoButton)
        {
            if(v.getId() == R.id.gaitInfoButton)
            {
                AlertDialog.Builder builder = new AlertDialog.Builder(UserDataInputActivity.this);
                builder.setMessage(R.string.GaitInformationContent)
                        .setPositiveButton(R.string.acknowledge, new DialogInterface.OnClickListener()
                        {
                            public void onClick(DialogInterface dialog, int id) {}
                        });
                // Create the AlertDialog object and return it
                builder.create().show();
            }
            if(v.getId() == R.id.UPDRSInfoButton)
            {
                AlertDialog.Builder builder = new AlertDialog.Builder(UserDataInputActivity.this);
                builder.setMessage(R.string.UPDRSInformationContent)
                        .setPositiveButton(R.string.acknowledge, new DialogInterface.OnClickListener()
                        {
                            public void onClick(DialogInterface dialog, int id) {}
                        });
                // Create the AlertDialog object and return it
                builder.create().show();

            }
            if(v.getId() == R.id.TUAGInfoButton)
            {
                AlertDialog.Builder builder = new AlertDialog.Builder(UserDataInputActivity.this);
                builder.setMessage(R.string.TUAGInformationContent)
                        .setPositiveButton(R.string.acknowledge, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {}
                        });
                // Create the AlertDialog object and return it
                builder.create().show();
            }
        }//If input fields are blank, refresh the activity
        else if(inputStrings.get(0).matches("") == true
             || inputStrings.get(1).matches("") == true
             || inputStrings.get(2).matches("") == true
             || inputStrings.get(3).matches("") == true
             || inputStrings.get(4).matches("") == true
             || inputStrings.get(5).matches("") == true
             || inputStrings.get(6).matches("") == true)
        {
            Toast.makeText(this, "Please enter all the fields", Toast.LENGTH_SHORT).show();
            startActivity(new Intent(this, UserDataInputActivity.class));
        }//if the input fields are filled and you aren't clicking any info buttons, then navigate to whatever, specified page
        else
        {
            if(v.getId() == R.id.pasttests)
                intent =  new Intent(this, PastDiagnosticResult.class);
            else if (v.getId() == R.id.currenttest)
            {
                intent =  new Intent(this, CurrentDiagnosticResultActivity.class);
                intent.putExtra("INPUTVALUE",inputStrings);
            }
            else if (v.getId() == R.id.myinfo)
                intent =  new Intent(this, UserDataInputActivity.class);
            else if(v.getId() == R.id.VoiceTestingPrompt)
                intent =  new Intent(this, SpeechRecognition.class);

            if (intent != null) {
                startActivity(intent);
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            }
        }
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.owner.introductoryapplication">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android:permission.RECORD_AUDIO" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".HomePageActivity" />

        <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" />

        <activity android:name=".UserDataInputActivity" />
        <activity android:name=".CurrentDiagnosticResultActivity" />
        <activity android:name=".PastDiagnosticResult"></activity>
        <activity android:name=".SpeechRecognition"></activity>
    </application>

</manifest>

您可以使用onSavedInstanceState

@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("message", "This is my message to be reloaded");
super.onSaveInstanceState(outState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
    String message = savedInstanceState.getString("message");
    Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}

請從如何使用onSavedInstanceState示例中

您需要重寫onSaveInstanceState(Bundle savedInstanceState)並保存輸入

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
   super.onSaveInstanceState(savedInstanceState);
   savedInstanceState.putString("editTextString", editText.getText().toString());

}

然后,您重寫onRestoreInstanceState(Bundle savedInstanceState)以獲得保存狀態

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
   super.onRestoreInstanceState(savedInstanceState);
   editText.setText(savedInstanceState.getString("editTextString"), TextView.BufferType.EDITABLE);

}

另一種方法是SharedPreferences,當重定向另一個活動時,將數據存儲在SharedPreferences中是打擊

SharedPreferences sharedpreferences;
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();

editor.putString("Agestr","3");
editor.putString("Speedstr", "22");

editor.commit();

當您回到此屏幕時,從SharedPreferences獲取此數據並填寫您的編輯文本

String Agestr = prefs.getString("Agestr", ""); 
((EditText) findViewById(R.id.AgePromptValue)).setText(Agestr )

暫無
暫無

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

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