Как передать данные между действиями, используя статические переменные в открытом классе? - PullRequest
3 голосов
/ 09 марта 2012

Я пытаюсь использовать статические переменные в открытом классе для передачи их между действиями.

У меня редкая проблема с этим. Я даю значения статическим переменным в деятельности. Это действие вызывает GLSurfaceView и прослушивает изменения ориентации экрана.

Если я даю значения статическим переменным в GLSurfaceView, то все работает нормально, значения сохраняются, и я могу получить их при повторном вызове метода onCreate после изменения ориентации экрана.

Проблема в том, что я сохраняю значения в статических переменных вне класса GLSurfaceView, внутри методов onTouchListener действия. Эти значения не хранятся должным образом в статических переменных, потому что, когда я пытаюсь получить к ним доступ в 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

Что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 09 марта 2012

Если Android убивает и перезапускает процесс для вашего приложения, статическим переменным присваиваются значения по умолчанию.Возможно, вам лучше использовать SharedPreferences вместо статических переменных: http://developer.android.com/guide/topics/data/data-storage.html#pref

2 голосов
/ 09 марта 2012

определить переменную как общедоступную статическую и затем использовать ее во всем приложении,

например

public static String xyz = "abcd";

теперь в любом классе для использования 'xyz' просто используйте его как в

classname.xyz;
0 голосов
/ 17 ноября 2017

Второе занятие : -

В xml-файле взять одно текстовое поле

Java Code

public static String name;

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

t.setText(name);

Первое занятие : -

в файле XML занимает один текст редактирования и одну кнопку

Java Code

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);

    }
}
...