簡體   English   中英

從一個活動中獲取數據並將其存儲在另一個活動中

[英]Taking data from one activity and storing it in another

我正在嘗試在 Android Studio 中構建一個非常簡單的應用程序,以練習使用 Intents 將數據從一個活動發送到另一個活動。 在我的主要活動中,我有一個“總計”TextView 和一個按鈕。 當我單擊按鈕時,它會將我帶到 AddNumber 活動,我可以在其中輸入 integer 並按下按鈕。 然后,這將我帶回到主要活動並將 integer 添加到總數中,更新 TextView。 我希望能夠在打開應用程序的同時多次執行此操作,以便總數不斷增加。

我嘗試使用 ViewModel 來存儲信息,因此每次運行 Main Activity onCreate 方法時它都不會被重置。 但是,每次我這樣做時,它都會工作一次(例如,如果我在 AddNumber 活動中添加 7,則主活動總數變為 7)。 但是,當我再次嘗試時,ViewModel 似乎被重置了,所以不記得我最初輸入的 7,所以如果我輸入 8,MainActivity 上的總數將設置為 8,而不是 15。我我在某個地方犯了一個錯誤,導致 ViewModel 重置? 我知道 ViewModel 是在應用程序打開時存儲數據的一種方式,但我似乎無法讓它工作。

非常感謝!

MainActivity.java 代碼:

public class MainActivity extends AppCompatActivity {
TextView totalTextView;
MainActivityViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    totalTextView = (TextView) findViewById(R.id.totalTextView);
    viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
    totalTextView.setText(Integer.toString(viewModel.total));
    getSetIncomingIntent();
}

public void addNumber(View view){
    Intent intent = new Intent(this, AddNumber.class);
    startActivity(intent);
}

public void getSetIncomingIntent() {
    Intent incomingIntent = getIntent();
    if (incomingIntent.hasExtra("value")) {
        viewModel.newValue = incomingIntent.getIntExtra("value",0);
        viewModel.addNumber();
        totalTextView.setText(Integer.toString(viewModel.total));
    }
}

}

MainActivityViewModel.java 代碼:

public class MainActivityViewModel extends ViewModel {

    int total = 0;
    int newValue;
    public void addNumber() {
        total = total + newValue;
    }
}

AddNumber.java 代碼:

public class AddNumber extends AppCompatActivity {

    EditText numberEditText;
    int value;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_number);
        numberEditText = (EditText) findViewById(R.id.numberEditText);
    }

    public void addNumber(View view){
        value = Integer.parseInt(numberEditText.getText().toString());
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("value", value);
        startActivity(intent);
    }
}

當我單擊按鈕時,它會將我帶到 AddNumber 活動,我可以在其中輸入 integer 並按下按鈕。 然后,這將我帶回到主要活動並將 integer 添加到總數中,更新 TextView。

這不是正在發生的事情。 首先,您創建一個AddNumber活動。

public void addNumber(View view){
    Intent intent = new Intent(this, AddNumber.class);
    startActivity(intent); // This launches a new AddNumber Activity
}

然后在這里創建一個MainActivity實例。

public void addNumber(View view){
    value = Integer.parseInt(numberEditText.getText().toString());
    Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra("value", value);
    startActivity(intent); // This launches a new MainActivity
}

所以你基本上是在構建一個巨大的 MainActivity / AddNumber 實例堆棧。 您需要使用startActivityForResult啟動AddNumber ,然后在MainActivity中處理它。 然后,您將使用原始MainActivity和原始 ViewModel 並且您將能夠對其進行更新。

請參閱有關啟動 Activity 的文檔以獲取結果

希望有幫助!

暫無
暫無

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

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