【问题标题】:Android Studio - Updating activity TextView based on user input from another activityAndroid Studio - 根据来自另一个活动的用户输入更新活动 TextView
【发布时间】:2020-04-19 15:05:23
【问题描述】:

这是我的第一个 Android 应用,我正在创建一个非常基本的资金管理器。

当应用第一次打开时,它会打开一个主页,其中一些预加载的数据是硬编码的(纯粹出于测试原因)。我可以选择让用户在另一个页面上编辑这些值,但是当切换回主视图时,不会显示新值。

这里是代码。感谢任何帮助!

// Create New Activity

package com.example.moneymanager;

import androidx.appcompat.app.AppCompatActivity;

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

public class CreateNewActivity extends AppCompatActivity{
    // Declare Button Variables
    Button dashboardBtn, homeBtn, extrasBtn, cancelBtn, saveBtn;
    EditText projectTitle, goalName;
    Boolean savedFlag = false;

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

        // Link buttons to xml value
        dashboardBtn = findViewById(R.id.dashboard_btn);
        homeBtn = findViewById(R.id.home_btn);
        extrasBtn = findViewById(R.id.extras_btn);
        cancelBtn = findViewById(R.id.cancel_btn);
        saveBtn = findViewById(R.id.save_btn);

        // Link Edit Text with Id
        projectTitle = findViewById(R.id.name_value);
        goalName = findViewById(R.id.goal1_name_value);

        // Set onClick listener for dashboard btn
        dashboardBtn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                moveToDashboard();
            }
        });

        // Set onClick listener for home btn
        homeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                moveToHome();
            }
        });

        // Set onClick listener for extras btn
        extrasBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                moveToExtras();
            }
        });

        // Listener for cancel Btn
        cancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                moveToHome();
            }
        });

        // Listener for save Btn
        saveBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                saveProject();
                moveToHome();
            }
        });
    }

    /*************************Private Methods*****************************/
    // Create private method for dashboard
    private void moveToDashboard(){
        Intent i = new Intent(this, DashboardActivity.class);
        startActivity(i);
    }

    // Create private method for extras
    private void moveToHome(){
        Intent i = new Intent(this, MainActivity.class);
        startActivity(i);
    }

    // Private method for extras btn
    private void moveToExtras(){
        Intent i = new Intent(this, ExtrasActivity.class);
        startActivity(i);
    }

    //Private method for save Btn
    private void saveProject(){
        // Link user Input with defined variables
        projectTitle.getText();
        goalName.getText();

        // Set flag to true to use in main activity
        savedFlag = true;
    }
}




// Main Activity

package com.example.moneymanager;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class MainActivity extends AppCompatActivity {
    // Declare Button Variables
    Button dashboardBtn, extrasBtn;
    TextView overViewText, savingsGoalText;

    // Create a new instance of the CreateNewActivity Class
    CreateNewActivity retrieve = new CreateNewActivity();
    Boolean savedFlagIsTrue = retrieve.savedFlag;

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

        // Link NAVIGATION to xml value
        dashboardBtn = findViewById(R.id.dashboard_btn);
        extrasBtn = findViewById(R.id.extras_btn);

        // Set onClick listener for dashboard btn
        dashboardBtn.setOnClickListener(new View.OnClickListener(){
           @Override
           public void onClick(View view){
               moveToDashboard();
           }
        });

        // Set onClick listener for extras btn
        extrasBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                moveToExtras();
            }
        });

        // If user has saved a new project
        if (savedFlagIsTrue){
            String projectTitle = retrieve.projectTitle.toString();
            String goalTitle = retrieve.goalName.toString();

            // Link and set Overview Text with input from CreateNewActivity Class
            overViewText = findViewById(R.id.overview_text);
            overViewText.setText(projectTitle);

            // Link and set Goal Text with input from CreateNewActivity Class
            savingsGoalText = findViewById(R.id.savings_goal_text);
            savingsGoalText.setText(goalTitle);
        }

    }

    // Create private method for dashboard
    private void moveToDashboard(){
        Intent i = new Intent(this, DashboardActivity.class);
        startActivity(i);
    }

    // Create private method for extras
    private void moveToExtras(){
        Intent i = new Intent(this, ExtrasActivity.class);
        startActivity(i);
    }

}

【问题讨论】:

    标签: java android-studio android-activity page-refresh


    【解决方案1】:

    如果我正确阅读了您的代码,您是否尝试在主要活动的 onCreate-Method 中加载输入的值?
    如果我没记错的话,在再次关闭第二个活动后不会调用该方法(它只会在活动停止或销毁后调用,但只有在第二个活动时才会暂停已启动)。


    您可能会尝试在 onResume-方法中查找用户输入,一旦活动回到前台,该方法应该被调用。 距离我上次使用 Android 已经有几天了,所以你可能想看看活动生命周期文档:
    https://developer.android.com/guide/components/activities/activity-lifecycle
    上面写着(关于 onResume):

    例如,此类事件可能是接听电话、用户导航到另一个活动或设备屏幕关闭。

    这听起来像你正在寻找的东西。

    【讨论】:

      【解决方案2】:

      我认为问题在于每次更改活动时,都会创建一个新活动。因此,您的硬编码数据无法被接管和接收。我建议看看this (startActivityForResult())

      也许ViewPager 是您的另一种选择。在那里你使用片段而不是活动,但你也可以用它们做你所有的事情。如果您将 PagerAdapter 中的 Fragments 作为变量存储,则数据将被存储,您可以通过 get 方法或接口访问它们。

      希望有所帮助;)

      【讨论】:

        猜你喜欢
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        相关资源
        最近更新 更多