Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Мобильная разработка (Android)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2015, 09:07   #1
KorPaEv
Пользователь
 
Аватар для KorPaEv
 
Регистрация: 08.07.2011
Сообщений: 42
По умолчанию Сохранение данные при переходе на другой активити

Доброго времени суток, уважаемые!
Вопрос заезжан и много инфы в инете, но прочитав и попробовав наткнулся на пару стен, соответственно полез на форум, может быть вы меня ткнете в мои ошибки!
Итак - имеем 2 активити и общее меню, при клике в меню для перехода на новую активити срабатывает метод создания активити - код приведу ниже, соответственно на новой ативити есть пункт меню для перехода на 1ю активити - там так же вызывается метод создания новой активити.
Теперь моя проблема и код.

1я активити содержит меню, метод сохранения данных и тд.
Код:
public class MainActivity extends Activity {

    EditText ePhone;
    SharedPreferences mSharedPref;
    CheckBox chbOne, chbTwo;

    private final String PHONEPERF = "Saved phone number";
    private String KEY_CHB_RELAY_ONE = "false";
    private String KEY_CHB_RELAY_TWO = "false";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        FindViews(); 
        LoadPerf(); 
        onLoadInstanceState(savedInstanceState);
       }

    protected void FindViews()
    {
        ePhone = (EditText) findViewById(R.id.ePhoneNum);
        chbOne = (CheckBox) findViewById(R.id.chbRelayOne);
        chbTwo = (CheckBox) findViewById(R.id.chbRelayTwo);
    }

    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState)
    {
        if (chbOne.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_ONE, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_ONE, "false");

        if (chbTwo.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_TWO, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_TWO, "false");

        super.onSaveInstanceState(savedInstanceState);
    }


   // @Override
    protected void onLoadInstanceState(Bundle savedInstanceState)
    {
        if (savedInstanceState != null)
        {
            if (savedInstanceState.getString(KEY_CHB_RELAY_ONE) == "true")
                chbOne.setChecked(true);
            else chbOne.setChecked(false);

            if (savedInstanceState.getString(KEY_CHB_RELAY_TWO) == "true")
                chbTwo.setChecked(true);
            else chbTwo.setChecked(false);
        }
    }

    //создаем меню
    @Override
    public boolean onCreateOptionsMenu(Menu currMenu) {
        super.onCreateOptionsMenu(currMenu);

        //заполняем меню
        getMenuInflater().inflate(R.menu.menu_main, currMenu);
        if (currMenu != null)
            currMenu.findItem(R.id.main_inf).setVisible(false);
        return true;
    }

    //событие на выбранный пункт меню
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int itemId = item.getItemId();
        Intent intent;

        // ищем наш пункт меню
        switch (itemId) {
            case R.id.about:
                intent = new Intent(MainActivity.this, AboutActivity.class);
                startActivity(intent);
                return true;
            case R.id.conf:
                intent = new Intent(MainActivity.this, SettingsActivity.class);
                startActivity(intent);
                return true;
            case R.id.names:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    public void ButtonClick(View view)
    {
        String strPhone = "";
        if (ePhone.getText().length() != 0)
            strPhone = ePhone.getText().toString();
        switch(view.getId())
        {
            case  R.id.bUpd:
            {
                break;
            }
            case  R.id.ibSavePerf:
            {
                SavePerf(view, strPhone);
                break;
            }
        }
    }

    public void SavePerf(View view, String str) {

        mSharedPref = getPreferences(MODE_PRIVATE);

        SharedPreferences.Editor mEditor = mSharedPref.edit();

        mEditor.putString(PHONEPERF, str);

        mEditor.commit();

        Toast.makeText(this, "Номер сохранен!", Toast.LENGTH_SHORT).show();
    }

    //Загрузить сохраненный номер из настроек приложения
    public void LoadPerf() {

        //Используем созданный файл данных SharedPreferences:
        mSharedPref = getPreferences(MODE_PRIVATE);

        //Создаем строковый объект, берем значение из сохраненных данных:
        String savedNumb = mSharedPref.getString(PHONEPERF, "");
        if (savedNumb == "")
        {
            ePhone.setText("");
            ePhone.setHint("Введите номер");
        }

        //Присваиваем вытащенные значения полям ввода:
        ePhone.setText(savedNumb);

        //Показываем Toast сообщение о том, что дело сделано:
        Toast.makeText(this, "Данные загружены", Toast.LENGTH_SHORT).show();
    }
}
Created by KorPaEv...
KorPaEv вне форума Ответить с цитированием
Старый 25.11.2015, 09:08   #2
KorPaEv
Пользователь
 
Аватар для KorPaEv
 
Регистрация: 08.07.2011
Сообщений: 42
По умолчанию

ПРОДОЛЖЕНИЕ.....
Возникла проблема - в отладчике когда я жму на кнопку перехода на 2 экран у меня осуществляется переход сюда

Код:
    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState)
    {
        if (chbOne.isChecked())
            savedInstanceState.putString("KEY_CHB_RELAY_ONE", "true");
        else savedInstanceState.putString("KEY_CHB_RELAY_ONE", "false");

        if (chbTwo.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_TWO, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_TWO, "false");

        super.onSaveInstanceState(savedInstanceState);
    }
соответственно у меня выбран чекбокс 1, при том, что он выбран отрабатывает

Код:
savedInstanceState.putString("KEY_CHB_RELAY_ONE", "true");
Дальше я перескакиваю на вторую активити, где так же есть меню с пунктом для первого активити и обработкой нажатий на пункты меню

Код:
package com.example.SmartHome;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class AboutActivity extends Activity {

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

    //создаем меню
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        super.onCreateOptionsMenu(menu);
        //заполняем меню
        getMenuInflater().inflate(R.menu.menu_main, menu);
        if (menu != null)
            menu.findItem(R.id.about).setVisible(false);
        return true;
    }

    //событие на выбранный пункт меню
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // получаем все пункты меню
        //пункт item определен в menu_main
        int itemId = item.getItemId();
        Intent intent;

        // ищем наш пункт меню
        switch (itemId)
        {
            case R.id.conf:
                intent = new Intent(AboutActivity.this, SettingsActivity.class);
                startActivity(intent);
                return true;
            case R.id.names:

                return true;
            case R.id.main_inf:
                intent = new Intent(AboutActivity.this, MainActivity.class);
                startActivity(intent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
Соответственно когда я тыкаю для возврата на первую активити у меня происходит его пересоздание - поле текстовое заполняется из настроек все норм, отладчик дальше идет в загрузку

Код:
   // @Override
    protected void onLoadInstanceState(Bundle savedInstanceState)
    {
        if (savedInstanceState != null)
        {
            if (savedInstanceState.getString(KEY_CHB_RELAY_ONE) == "true")
                chbOne.setChecked(true);
            else chbOne.setChecked(false);

            if (savedInstanceState.getString(KEY_CHB_RELAY_TWO) == "true")
                chbTwo.setChecked(true);
            else chbTwo.setChecked(false);

        }
    }
и тут я вижу что savedInstanceState = null
Либо при создании из второй активити оно обнуляется, но должно же сохраняться судя по урокам у всех все работает, например отсюда
http://pr0andr0id.blogspot.ru/2014/04/3.html
там так же создается активити новое но при возврате savedInstanceState != null
Соответственно мой выбранный чекбокс не восстанавливается

Какие есть предположения куда копать что не правильно?
Created by KorPaEv...

Последний раз редактировалось KorPaEv; 25.11.2015 в 09:29.
KorPaEv вне форума Ответить с цитированием
Старый 27.11.2015, 11:55   #3
kana8686
Новичок
Джуниор
 
Регистрация: 22.04.2013
Сообщений: 1
По умолчанию Вредоносный скрипт

Здраствуйте !!! Мне пришло сообщение с вложением этого скрипта. Этот скрипт защифровал все данные на моем компьютере. все офисные документы, изображение, и база данных 1С. И всех форматов переименовал на .vaul. Помогите пожалуйста дешифровать мои данные
kana8686 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при сохранение данных в файл данные сохранились в скрытый файл ini alman12 Общие вопросы Delphi 27 25.05.2015 07:53
При выборе другой фамилии на форме данные в другой столбец and150382 Microsoft Office Access 4 19.08.2013 21:07
Данные в форму из запроса + обновление при переходе по записям Dim75 Microsoft Office Access 1 15.05.2012 12:49
Ошибка при переходе к другой вкладке PageControl1 в Delphi 2010 Kreadlling БД в Delphi 2 07.04.2011 21:02
как сделать, чтобы при переносе с одного листа на другой данные не заменялись, а писались в новую строку? user199a Microsoft Office Excel 4 08.01.2011 18:13