Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.157.186] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте!
Учусь примудростям ведроида, и столкнулся с проблемкой при отображении НЕСКОЛЬКИХ Activity. Задача проста - есть главный Activity - интерфейс программки. Есть второй Activity - Меню, или, конфигурации. Когда пользователь жмёт кнопку "menu", хочу отобразить временный Activity, в котором можно будет настроить параметры основной программы, затем принять или откатить изменения и закрыть временный Activity. Язык: Java Компилятор: Eclipse JRE 1.7+ Android API: v8.0 Вычитал что с помощью Intent и Activity.startActivity(Intent); можно перейти с первого фрейма на второй. Собстно, пишу так: menu.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/menuLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/buttonOk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ok" /> </LinearLayout> main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TableRow android:id="@+id/panelMenu" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="fill_horizontal|center" android:visibility="gone" > <Button android:id="@+id/buttonMenu" style="?android:attr/buttonStyleSmall" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/button_menu" android:textSize="12sp" /> <Button android:id="@+id/buttonExit" style="?android:attr/buttonStyleSmall" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/button_exit" android:textSize="12sp" /> </TableRow> </LinearLayout> Манифест: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ru.club.android" android:versionCode="1" android:versionName="1.0" > <!--uses-permission android:name="android.permission.INTERNET"></uses-permission--> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name="ru.club.android.Main" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="@string/app_name" android:name="ru.club.android.Menu"/> </application> </manifest> Код главного фрейма Main.class: public abstract class ActivityConsole extends Activity implements IConsole { //... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //... btnMenu = (Button) findViewById(R.id.buttonMenu); btnMenu.setOnClickListener(new ButtonMenuListener()); //... } //... } Тут всё просто - добавляю на кнопку листенер: ButtonMenuListener.class: public class ButtonMenuListener implements OnClickListener { public ButtonMenuListener(){ } @Override public void onClick(View view) { Activity main = (Activity)DataContainer.getInstance().getCore().getContext(); Intent menu = new Intent(main, Menu.class); main.startActivity(menu); } } Далее, код самого Menu.class: public class Menu extends Activity { //Button buttonOk; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.menu); //... } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ( keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_BREAK) { // Здесь как то выйти из этого Activity, и вернуть пользователю Main.class return true; } else { return super.onKeyDown(keyCode, event); } } } Собстно, сыпится всё это дело в момент нажатия на кнопку "Меню", то есть, когда создаётся Intent. Вопрос может показаться глупым, но, что то не могу въехать... Подскажите, как грамотно реализовать подобную идею - отобразить фрейм настроек Menu.class, передать ему управление и в нужный момент (по нажатию кнопки телефона "назад") - выгрузить этот фрейм, вернув управление Main.class? |
Сообщ.
#2
,
|
|
|
Пришлось помещать всё в один фрейм, и отображать нужный слой через setVisibility.
Работает, относительно, шустро выглядит не криво, но, как то не нормально... |
Сообщ.
#3
,
|
|
|
Обрабатывать нажатие кнопки "назад" не нужно, по ее нажатию автоматом грузится предыдущая аctivity.
Цитата VisualProg @ Activity main = (Activity)DataContainer.getInstance().getCore().getContext(); Зачем это здесь Вот пример вызова другой activity: tosett = new Intent(this, Prefs.class); startActivity(tosett); Prefs - имя activity, которую нужно отобразить. Все. Больше ничего мудрить не нужно. |
Сообщ.
#4
,
|
|
|
Цитата Обрабатывать нажатие кнопки "назад" не нужно, по ее нажатию автоматом грузится предыдущая аctivity. Это хорошо, тогда всё проще. Цитата Зачем это здесь Сам же дёргаешь контекст: Intent(this, Prefs.class); this - Activity, в моём случае он в ядре. Цитата Все. Больше ничего мудрить не нужно. Да, но минимальный пример не запускается... |