0

そこで、アプリを起動し、MainActivity の onCreate メソッドで変数の値を変更します。しかし、ボタンをクリックすると、別のアクティビティに移動し、このアクティビティで変更された変数を取得しようとすると、変数の元の値のみが取得されます。

したがって、ここでの問題は、変更された変数を最初のクラスから取得する方法がわからないことです。それ、どうやったら出来るの?

コードは次のとおりです。

主な活動:

package com.example.getandset;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    //Initialised variable
    String tag;

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

        //The text that I want to show in the next class
        setTag("Show this text");
    }

    public void setTag(String t){
        tag =t;
    }

    public String getTag(){
        return tag;
    }

    public void onClick_Start(View v){
//start of the next Class
        startActivity(new Intent(this, CalledActivity.class));
    }

}

および呼び出されたアクティビティ:

package com.example.getandset;

import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;

public class CalledActivity extends Activity {

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

        TextView tv = (TextView)findViewById(R.id.textView);
//trying to get the changed variable
        tv.setText("Got text: "+ new MainActivity().getTag());
    }


}
4

3 に答える 3

0

Main アクティビティからこのようなデータ呼び出しを行うべきではありません。オブジェクトクラスと同じではないため、動作が異なります。(問題は、オブジェクトの初期化されたインスタンスではなく、クラスを呼び出しているという事実にあります)

必要なことは、データ バンドルを含む INTENT を使用してアクティビティを開始することです。

public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
} 

(これはアンドロイド開発ガイドから直接です)

次に、2 番目のアクティビティで、

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

これは、任意の数の変数/変数の種類で行うことができます。

もう 1 つのオプションは、変数を「保持」するオブジェクト クラスを作成することです。上記と同じ方法でそのオブジェクトを渡し、.getVariable(); を使用して通常どおりクラスから変数を呼び出します。

于 2013-08-26T14:46:38.363 に答える
0

MainActivitytag初期化された の新しいインスタンスを作成しますnullActivity一般に、このような をインスタンス化するべきではなく、常にシステムにstartActivity.

必要な効果を得るには、いくつかの方法があります。

  • 開始するインテントでタグを渡しますCalledActivity
  • 永続ストレージを使用して、あるアクティビティから別のアクティビティにタグ値を転送します。
于 2013-08-26T14:39:03.270 に答える
0
public void onClick_Start(View v){
 //start of the next Inten
   Intent intent = new Intent(this, CalledActivity.class)
   intent.putExta("key",getTag()) ;
   startActivity(intent );
}

タグテキストを CalledActivity から onCreate メソッドに渡す

String value = getIntent().getStringExtra("key");
于 2013-08-26T14:37:48.967 に答える