На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> Показать временный Activity/Intent для настроек , Android java
    Здравствуйте!
    Учусь примудростям ведроида, и столкнулся с проблемкой при отображении НЕСКОЛЬКИХ Activity.
    Задача проста - есть главный Activity - интерфейс программки. Есть второй Activity - Меню, или, конфигурации.
    Когда пользователь жмёт кнопку "menu", хочу отобразить временный Activity, в котором можно будет настроить параметры основной программы, затем принять или откатить изменения и закрыть временный Activity.

    Язык: Java
    Компилятор: Eclipse JRE 1.7+
    Android API: v8.0

    Вычитал что с помощью Intent и Activity.startActivity(Intent); можно перейти с первого фрейма на второй.

    Собстно, пишу так:

    menu.xml:
    ExpandedWrap disabled
      <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:
    ExpandedWrap disabled
      <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>


    Манифест:

    ExpandedWrap disabled
      <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:
    ExpandedWrap disabled
      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:
    ExpandedWrap disabled
      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:

    ExpandedWrap disabled
      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?
      Пришлось помещать всё в один фрейм, и отображать нужный слой через setVisibility.
      Работает, относительно, шустро выглядит не криво, но, как то не нормально...
        Обрабатывать нажатие кнопки "назад" не нужно, по ее нажатию автоматом грузится предыдущая аctivity.

        Цитата VisualProg @
        Activity main = (Activity)DataContainer.getInstance().getCore().getContext();

        Зачем это здесь :blink:

        Вот пример вызова другой activity:
        ExpandedWrap disabled
          tosett = new Intent(this, Prefs.class);
          startActivity(tosett);


        Prefs - имя activity, которую нужно отобразить. Все. Больше ничего мудрить не нужно.
          Цитата
          Обрабатывать нажатие кнопки "назад" не нужно, по ее нажатию автоматом грузится предыдущая аctivity.

          Это хорошо, тогда всё проще.

          Цитата
          Зачем это здесь :blink:

          Сам же дёргаешь контекст:
          ExpandedWrap disabled
            Intent(this, Prefs.class);

          this - Activity, в моём случае он в ядре.

          Цитата
          Все. Больше ничего мудрить не нужно.

          Да, но минимальный пример не запускается...
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0317 ]   [ 15 queries used ]   [ Generated: 2.05.24, 12:00 GMT ]