Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Android > Кнопка назад


Автор: jaroslav.zp.ua 09.04.12, 16:16
Задача заключаетса сложить две ячейки каждая которая находитьса На разной форме, а на третей форме кнопка с обработчиком и ячейкой вывода результата. Но проблема токова что при обртном возвращении на форму в ячейках пустота, а необходимо чтоб оставались данные в ячейках потому как буду ссылатса на них из других форм. Заранее всем спасибо

Автор: mrco 09.04.12, 18:24
Какая-то не правильная задача. Вам нужно отдельно организовать сохранение значений ячеек. Возможно поможет обработка onSaveInstance/OnRestoreInstace, иначе сохранять куда-то значения в onPause/onResume (например в SharedSettings).

Автор: Хрен 09.04.12, 19:52
Можно передавать данные между активити через интенты:

http://developer.android.com/reference/and...roid.os.Bundle)
http://developer.android.com/reference/and...tml#getExtras()

Но ваще согласен, задача слегка странная. Если каждая активити отвечает за свою переменную, то я бы лучше организовал класс-хранилище с сингтоном для этих самых переменных, и брал их оттуда, когда нужно.

Автор: jaroslav.zp.ua 09.04.12, 20:25
Ребят вот нацарапал проэкт. Активити одна а форм будит много
Proba.rar (, : 135)

Автор: mrco 09.04.12, 21:54
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    public class ProbaActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            requestWindowFeature(Window.FEATURE_NO_TITLE);//----������� ���������
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,//---- ������ �����
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
     
            setContentView(R.layout.main);
        }
        public void but_vuxod_Click (View v){
            new AlertDialog.Builder(this)
            .setTitle("Ask?")
            .setMessage("message?")
            .setNegativeButton(android.R.string.no, null)
            .setPositiveButton(android.R.string.yes, new OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    System.exit(0);
                }}).create().show();
        }
        public void slog_Click (View v){
            EditText a = (EditText)findViewById(R.id.editText_1_id);
            EditText b = (EditText)findViewById(R.id.editText_2_id);
            EditText c = (EditText)findViewById(R.id.editText1_otv_id);
            float aot = Float.parseFloat(a.getText().toString());
            float bot = Float.parseFloat(b.getText().toString());
            float cot=aot+bot;
            c.setText(""+cot);
     
        }
        public void but_otv_Click (View v){
            setContentView(R.layout.otvetnaia);
        }
     
        public void but_perv_Click (View v){
            setContentView(R.layout.pervoia);
        }
        public void but_vtor_Click (View v){
            setContentView(R.layout.vtoraia);
        }
        public void but_nazad_Click (View v){
            setContentView(R.layout.main);
        }
        public boolean onKeyDown(int keyCode, KeyEvent event){
            if(keyCode==KeyEvent.KEYCODE_BACK){
                setContentView(R.layout.main);
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    }

Вот это
Цитата
public void but_otv_Click (View v){
setContentView(R.layout.otvetnaia);
}

public void but_perv_Click (View v){
setContentView(R.layout.pervoia);
}
public void but_vtor_Click (View v){
setContentView(R.layout.vtoraia);
}
public void but_nazad_Click (View v){
setContentView(R.layout.main);
}

Абсолютно и совершенно неправильно. setContectView не предназначен для смены разментки в процессе выполнения активити. Собственно я за 3 года разработки для андроида никогда его не использовал ни где кроме как в onCreate. Хотите сменить содержимое активити - запускайте другую активити. Потому у вас ничего не сохраняеться.

Автор: mrco 09.04.12, 22:00
Для каждой формі должна біть своя активти. Смотрите примеры в Android SDK API Demos:
- App/Activity/Forwarding
- App/Activity/Reorder activities

Автор: jaroslav.zp.ua 10.04.12, 13:00
Ну этот я порядок чтобы необходимо делать с формой свой активрти, а вот чтоб в ячейках быдиданные их необходимо куда-то сохратить а при вызове формы их загружать

Автор: jaroslav.zp.ua 10.04.12, 20:14
Пробывал через интенты чёт не получаетса, подскажите

Автор: Джонни 11.04.12, 11:55
Цитата jaroslav.zp.ua @
Пробывал через интенты чёт не получаетса, подскажите

Что не получается? И как может не получится? Добавил в интент, поймал в он криейте, всё.

Автор: jaroslav.zp.ua 11.04.12, 18:03
Есть идея через Preference только пример у меня для одной ячейки, а на две не получаетса, подскажите как добавить
Вот код
public void Click_save (View v){
saveText();
}
public void Click_lond (View v){
loadText();
}
void saveText(){
EditText etText = (EditText)findViewById(R.id.editText_id);
sPref=getPreferences (MODE_PRIVATE);
Editor ed=sPref.edit();
ed.putString(SAVED_TET, etText.getText().toString());
ed.commit();
Toast.makeText(this, "Текст сохранён", Toast.LENGTH_SHORT).show();
}
void loadText(){
EditText etText = (EditText)findViewById(R.id.editText_id);
sPref=getPreferences (MODE_PRIVATE);
String savedText =sPref.getString(SAVED_TET, "");
etText.setText(savedText);

Toast.makeText(this, "Текст загружен", Toast.LENGTH_SHORT).show();
}

Автор: Хрен 11.04.12, 19:19
Слушай, вот что тебе мешает сделать класс
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    public class MyStorage {
        static int m_cellInfo1;
        static int m_cellInfo2;
        static int m_cellInfo3;
    }


и сохранять туда данные своих ячеек дабы потом их оттуда забрать? :)

Автор: jaroslav.zp.ua 11.04.12, 21:29
Тоесть в void saveText и в void loadText() вместо etText запихнуть MyStorage????

Автор: Хрен 11.04.12, 22:46
Цитата jaroslav.zp.ua @
Тоесть в void saveText и в void loadText() вместо etText запихнуть MyStorage????

Нет. Отдельный класс просто сделай. Со статическими членами. И сохраняй туда значения ячеек.

Автор: jaroslav.zp.ua 12.04.12, 11:23
Извени не понимаю наведи примерчик к моему. Плиззззз

Автор: Джонни 12.04.12, 12:11
jaroslav.zp.ua, зачем ты лезешь в мобайл? ты ж простейших вещей не шаришь. Читай про синглтон.

Автор: Хрен 12.04.12, 12:45
Цитата Джонни @
Читай про синглтон.

Со статическими членами там даже синглтон не нужен. А в остальном согласен - книжку бы полистать....

Автор: jaroslav.zp.ua 12.04.12, 15:22
Та листал, просто начинающий. Я так понял m_cellInfo1 это тоже самое что и EditText etText = (EditText)findViewById(R.id.editText_id);
Или как его записать в этот класс, немогу понять, или указать в классе что m_cellInfo1 это ячейкак. КАК???

Автор: jaroslav.zp.ua 12.04.12, 18:40
Всё разобрался *Хрен* болььшое спасибо ты прав всё элементарно. Вот проверь правельно

public class SavingActivity extends Activity {

SharedPreferences sPref;
public static final String EXT_COLS = "cols";//------НАДОБЫЛО ЭТО ДОБАВИТЬ И ВСЁ
public static final String EXT_ROWS = "rows";//----- И ЭТО


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void Click_save (View v){
saveText();
}
public void Click_lond (View v){
loadText();
}
void saveText(){
EditText etText1 = (EditText)findViewById(R.id.editText1_id);
EditText etText2 = (EditText)findViewById(R.id.editText2_id);
sPref=getPreferences (MODE_PRIVATE);
Editor ed=sPref.edit();
ed.putString(EXT_COLS, etText1.getText().toString());
ed.putString(EXT_ROWS, etText2.getText().toString());
ed.commit();
Toast.makeText(this, "Текст сохранён", Toast.LENGTH_SHORT).show();
}
void loadText(){
EditText etText1 = (EditText)findViewById(R.id.editText1_id);
EditText etText2 = (EditText)findViewById(R.id.editText2_id);
sPref=getPreferences (MODE_PRIVATE);
String savedText1 =sPref.getString(EXT_COLS, "");
String savedText2 =sPref.getString(EXT_ROWS, "");
etText1.setText(savedText1);
etText2.setText(savedText2);

Toast.makeText(this, "Текст загружен", Toast.LENGTH_SHORT).show();
}
}

Извеняюсь за малые знания и глупые вапросы

Автор: Хрен 12.04.12, 19:56
Ох... Ну, да, так тоже можно. Правда, это способ, о котором mrco говорил ещё в начале темы =)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)