-1

アクティビティ間でリアルタイム データを共有するソリューションが見つかりませんでした。私の最初のアクティビティは、リアルタイム オブジェクト (タイプ double、乱数) を受け取ります。そして、この数字を 2 番目のアクティビティに渡したいと思います。それはすべて機能し、2番目のアクティビティのみがデータを1回だけ表示します。最初のアクティビティに戻ってアクティビティを更新する必要があり、それから 2 番目のアクティビティに最新のデータが表示されます。Singelton パターンを実装しました。

public class FirstActivity extends Activity{
 public double xAxis;
 public double yAxis;
 public static FirstView instance;

     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.device_view);

        handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    int data1 = msg.arg1;
                    xAxis = (double) data1;
                    dataX.setText(String.valueOf(xAxis));
                    int data2 = msg.arg2;
                    yAxis = (double) data2;
                    dataY.setText(String.valueOf(yAxis));

                }
            };
        secondview.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent nextScreen = new Intent(getApplicationContext(),
                            SecondActivity.class);
                    startActivity(nextScreen);
                }
            });

    }

     public static void initInstance(){
    if(instance == null)
    {
       instance = new FirstActivity();
    }
     }

    public static FirstActivity getInstance(){
        return instance;
    }
}

SecondView クラス

public class SecondActivity extends Activity{
       private double valueX;
    private double valueY;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.linegraph); 
        valueX = FirstActivity.getInstance().xAxis;
        valueY = FirstActivity.getInstance().yAxis;
      }
}

アプリケーションクラス

package com.bluetoothcomm;

import android.app.Application;

public class MyApplication extends Application {

    @Override
    public void onCreate(){
        super.onCreate();
        initSingeltons();
    }

    public void initSingeltons(){
        FirstActivity.initInstance();
    }

}
4

4 に答える 4

1

Activity1 と Activity2 にリアルタイム データを提供できるバックグラウンド サービスを実装できます。putExtras を使用して Intent を介して Activity1 から Activity2 にデータを渡す場合に問題が発生すると推測しています。この方法では、Activity2 を開始したときにのみこれが行われます。

于 2012-08-25T23:54:34.247 に答える
1

問題が見つかりました。解決策は を使用することApplicationです。これだけでは私の問題は解決しません。問題は、静的変数インスタンスpublic static FirstView instanceが、それを初期化する最初のクラスであるクラス ローダーにバインドされていることです。したがって、任意のクラス内の静的変数がアクティビティによって初期化され、2 番目のアクティビティが開始されると、最初のアクティビティが破棄されるため、静的変数も初期化されていないことを意味します。そのため、SecondActivity は最新のデータやリアルタイム データを取得せず、静的定数データのみを取得します。

Singelton と Application の組み合わせでコードを少し変更しました。これにより、SecondActivity がアクティブ化されたときに静的変数が初期化されないようにすることができます。しかし、それでも同じ結果が得られます。2番目のアクティビティに切り替えると、静的変数インスタンスが初期化されません。私は何か間違ったことをしています、誰かがそれを見ますか。コードを追加しました。

@マックス・ラスギド、@オラビグ

于 2012-08-26T20:20:05.757 に答える
0

activity1 によって受信されたと言う場合、 activity2 が表示されたときにデータはどのように変化するはずですか?

ただし、設定、またはアプリケーションクラスの属性(シングルトン自体)を使用しますが、ニーズを完全に理解するには情報が少なすぎます...

于 2012-08-25T23:50:23.833 に答える
0

インテント プロセスを使用する必要があります。ドキュメント

于 2012-08-25T23:41:24.950 に答える