3

アクティビティ間でそれらを渡すためにパブリック クラスで静的変数を使用しようとしています。

私はそれを行う際にまれな問題を抱えています。アクティビティの静的変数に値を与えています。このアクティビティは GLSurfaceView を呼び出し、画面の向きの変更をリッスンします。

GLSurfaceView の静的変数に値を与えると、すべて正常に機能し、値が保存され、画面の向きが変わった後に onCreate メソッドが再度呼び出されたときに値を取得できます。

問題は、アクティビティの onTouchListener メソッド内の GLSurfaceView クラス外の静的変数に値を格納する場合です。これらの値は静的変数に適切に格納されません。GLSurfaceView でそれらの値にアクセスしようとすると、これらの値が本来あるべき値ではないためです。

これは私の静的変数クラスです:

public class MagazineStatus {
//clase utilizada para almacenar variables estáticas.   
static int currentPage=1; //página actual   
//Valores originales cuando pasamos de un modo a otro, por ejemplo, de portrait a landscape.
static float oScale=0.0f;
static float oX=0.0f;
static float oY=0.0f;
static float oZrot=0;   
static boolean modeChanged=false; //indica si hemos cambiado de modo 
(landscape/portrait)    
}

ここで、アクティビティ クラスに値を保存しています (デバッグを行ったところ、正しく保存されているようです)。

        for (int i=0;i<thumbnailLinearLayouts.size();i++){
        final int auxIndex=i;
        thumbnailLinearLayouts.get(i).setOnTouchListener(new OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                MagazineStatus.currentPage=auxIndex;
                System.out.println("MagazineStatus.currentPage: "+MagazineStatus.currentPage);
                return true;
            }                               
        });
    }

ここで、GLSurfaceView クラスでこれらの値を取得しようとしていますが、値が正しくありません。以前に保存された値ではなく、元の初期値 1 を取得しています。

currentPage=MagazineStatus.currentPage;     //cargo datos guardados antes del cambio de orientación

私は何を間違っていますか?

4

3 に答える 3

7

Android がアプリケーションのプロセスを強制終了して再起動すると、静的変数がデフォルト値に割り当てられます。SharedPreferences静的変数の代わりに使用する方が良いかもしれません: http://developer.android.com/guide/topics/data/data-storage.html#pref

于 2012-03-09T16:51:19.877 に答える
2

変数を public static として定義し、それをアプリケーション全体で使用します。

例えば

public static String xyz = "abcd";

現在、どのクラスでも「xyz」を使用するには、以下のように使用してください

classname.xyz;
于 2012-03-09T16:56:38.137 に答える
0

2 番目のアクティビティ :-

xml ファイルで 1 つの textview フィールドを取得します

Java コード

public static String name;

TextView t=(TextView)findViewById(R.id.tv);

t.setText(name);

最初のアクティビティ:-

xml ファイルでは、1 つの edittext と 1 つのボタンを取ります

Java コード

button.setOnClickListener(new View.onClickListener){

    @override
    public void onClick(View v){

    SecondActivity.name=editText.getText().toString();

    Intent i=new Intent(firstActivity.this,SecondActivity.class);

    startActivity(i);

    }
}
于 2017-11-17T11:37:40.720 に答える