2012-01-05 7 views
6

Я новичок в Android.Разработка макета головоломки в Android

Я хочу разработать приложение, в котором я могу изменить экраны на основе выбранной кнопки. Приложение может заканчиваться 20 + экранами с кнопками или формой ввода. С 1 экрана мне пришлось менять экран на другой экран. Я думал о FrameLayout, где я могу изменить детей.

У меня нет возможности начать работу. Как я создал Activity. Мой каждый экран должен превышать класс, чтобы я мог добавить его в макет? Как сделать первый экран видимым при запуске.

Все это кажется простым и глупым вопросом, но на самом деле я не могу получить отправную точку для того же самого. Любая помощь является признательной, чтобы помочь мне достичь моей цели.

ОБНОВЛЕНО:

@Ghost, от вашего решения еще 1 вопрос возникшие в моем сознании. Для экранов, где мне нужно показывать только кнопки в определенном формате, я добавил GridView и ButtonAdapter с помощью this site.

Если я добавляю clickListener только в ButtonAdapter, то как я могу передать параметры setIntent (FooFooActivity.this ....) ????? У меня есть Conext в ButtonAdapter - я могу привести его в FooFooActivity и работать с ним. Я могу дать ifs в ButtonAdapter в onclick(), чтобы перейти на правильный экран. Но setIntent cna работает так, как я говорю, или что-то в этом роде. Если он может работать, то для многих экранов мой единственный GridView и один класс ButtonAdapter могут выполнять всю работу.

НОВЫЕ UPDATIONS ПО Trials:

@Ghost, я попробовал и нашел, что выше setIntent (FooFooActivity.this ....) в ButtonAdapter оленья кожа работа - как в ButtonAdapter он не найдет возможности для FooFooActivity. это.

  • В моей FooFooActivity я не могу установить onclikcListeners для кнопок, добавленных через ButtonAdapter. Я попробовал с gridview.getChild (i), но просто не настроен.
  • Я также сделал еще один linearlayout xml (buttonspage.xml) с 6 кнопками и DataActivity, который его использует. Это работает отлично, и при нажатии кнопки также отображается FooFooActivity.
  • Чтобы использовать тот же самый макет buttonspage.xml в нескольких действиях, я установил содержимое FooFooActivity как pagepage и установил его кнопку для прослушивания нажатием кнопки. Для 1 кнопки я установил выход из приложения и для другой кнопки, чтобы показать DataActivity.

  • Итак, у меня есть 2 действия, FooFoo, который показывает DataActivity/Exit & DataActivity, который возвращается в FooFoo. Его цикл, начинающийся &, заканчивается FoofooActivity. Если я сначала нажму «Выход», он уйдет. Но если я нажму «Выход» после отображения DataActivity, то он просто не уйдет и покажет только DataActivity. Разве я не могу использовать один и тот же макет в нескольких действиях? Или я могу ошибаться где-нибудь (я так сомневаюсь)? Тот же макет кнопки, который я должен использовать на 10-12 страницах, за исключением разного текста на кнопке и событиях. Так думал за Write Once Use Multiple Times. Также необходимо динамически менять стили кнопок всех этих кнопок.

Благодаря

ответ

12

Насколько ваш первый экран касается, это зависит от активности, и он работает непосредственно при запуске проекта. Например, если у вас есть проект с именем FooFoo, то при компиляции/создании вашего проекта андроида сам андроид называет первый класс FooFooActivity (т. Е. Если вы позволили андроиду создать из него активность) , Конечно, вы можете переименовать это тогда и там себя. Итак, как только вы скомпилируете свой пользовательский интерфейс в файле по умолчанию main.xml и вернетесь в свой файл java FooFooActivity, есть определенная строка внутри метода onCreate. Эта линия setContentView(R.layout.main); Эту линия устанавливаетвид из содержания присутствует внутри этого main.xml файла. Когда вы запускаете программу и запускаете эмулятор, эмулятор представляет вид вашего main.xml, если ваш проект не содержит компиляция или ошибки времени выполнения.

Теперь, приходя к вашим 20+ макетам: Вы можете иметь их все в своей папке макета. Назначьте atleast один button на каждом экране, который приведет вас на какой-то экран, скажем «XYZ», и предположим, что имя класса «ABC». Предположим также, что ваш класс FooFooActivity приведет вас к этому классу ABC. В следующих шагах вы узнаете, как сделать навигационную часть.

I. Внутри метода вашего класса FooFooActivity у вас уже есть setContentView. Теперь, после этой строки, добавьте следующие строки:

Button button = (Button)findViewById(R.id.button1); 
    button.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View v) 
       { 
        Intent intent = new Intent(FooFooActivity.this, ABC.class); 
        startActivity(intent); 
       } 
      }); 

Passing an Intent К вы можете вести себя/свой пользователь в нужном экране/активность.

II. Пожалуйста, имейте в виду, что в вашем классе ABC используйте тот же метод onCreate и поместите свой XYZ-макет внутри setContentView следующим образом: setContentView(R.layout.XYZ);

III. В вашем файле манифеста, после вашего

<activity 
      android:label="@string/app_name" 
      android:name=".FooFooActivity" > 


      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

добавить следующее:

<activity 
      android:name=".ABC" 
      android:label="@string/app_name" 
      > 
     </activity> 

После того, как вы закончите с этими шагами, запустите программу.

Обратите внимание, что это всего лишь для отображения 2 экранов для вашего пользователя. Вам нужно повторить его еще 20 раз. Я не знаю/не вижу другого пути.

Что касается ваших макетов, я бы посоветовал вам придерживаться Relative Layout или Linear Layout. Как правило, большинство «нормальных» макетов может быть достигнуто любой из этих или их комбинаций. Если вы хотите больше, вы всегда можете найти справку по Android Developers' Site или Stack Overflow. Во всяком случае, есть много других вещей, которые я не смог объяснить здесь, но я намереваюсь в свое время. Вы всегда можете обратиться к великим книгам, таким как Hello Android, Programming Android и Learning Android.Даже у CommonsWare - Mark Murphy есть свой набор книг, которые очень популярны. Вы всегда можете начать с любого из них.

Надеюсь, это поможет. Всего наилучшего!

EDIT СЛЕДУЮЩЕГО ВАШЕГО Updation:

Конечно, это будет возвращать последнюю активность, потому что я полагаю, вы имеете следующий фрагмент кода с помощью кнопки выхода:

Button exit = (Button)findViewById(R.id.button2); 
     exit.setOnClickListener(new OnClickListener() 
     { 

      public void onClick(View v) 
      { 
       finish(); 

      } 
     }); 

Таким образом, в основном, что вы делаете, заканчивает эту конкретную ABC/Main Activity. Это означает, что андроид приведет вас к предыдущему экрану/активности. Это все. Если вы придерживаетесь того же макета и планируете использовать его для разных видов деятельности, все будет просто запутывать. Всего лишь 2 экрана/действия, это довольно запутанно для вас на данный момент. Представьте, что может случиться с 20+. Ну, дизайн в конечном итоге оставлен вам. Это все, что я могу сказать.

+0

@Ghost, Спасибо за объяснение. Итак, в основном, что вы говорите, я должен иметь класс Activity для каждого экрана макета, который я хочу (20+). И для каждой кнопки в Activity я должен был начать с setIntent(). Надеюсь, я понял это правильно. – Tvd

+0

@Ghost, Единственная проблема с запуском, которую я имею - мой main.xml остается такой, какой есть. Я хочу начать с макета главной страницы, т. Е. MainActivity из моей оригинальной FooFooActivity. Причина этого заключается в том, что мне нужно будет установить/показать MainActivity, т. Е. Главную страницу. Если я добавлю это содержимое в main.xml, то как мне показать этот экран из класса ABC? – Tvd

+1

Да, это правильно. Но вы не устанавливаете намерения для каждой кнопки в своем макете. Пример. Если у вас есть кнопка отмены, которая обычно позволяет пользователю выйти из этой конкретной активности, то передача намерения не имеет смысла. Вы передаете намерение на кнопку только тогда, когда вам нужна эта кнопка, чтобы направлять ваших пользователей на другой экран/активность. И да, пожалуйста, примите ответ, если он имеет/поможет/поможет вам .. :) – Ghost

Смежные вопросы