J2J.RU - cовременная система продвижения сайтов
Меню сайта

Категории раздела

Наш опрос
Какой у Вас Андроид
Всего ответов: 192

Файлы
Новые Популярные Лучшие


Теги
Android (34)
uCoz (8)
mobile (3)
sistem (3)
xml (3)
google (2)
html (2)
Oboi (2)
opera (2)
Rest (2)
soap (2)
action (1)
ajax (1)
App2SD (1)
apps (1)
CSS (1)
Ddms (1)
editor (1)
gmail (1)
gobook (1)
java (1)
legend (1)
Lite (1)
live (1)
mp3 (1)
mrtm (1)
Muse (1)
ninja (1)
pdf (1)
php (1)
Root (1)
sensor (1)
shazam (1)
sql (1)
thread (1)
touch (1)
UI (1)
Widget (1)
Worms (1)
Xplore (1)
Zirco (1)

RSS
  
Новостная лента.

Форумная лента.

Файловая лента.  

Главная » Статьи » Программинг » Программирование [ Добавить статью ]

Знакомство с Android. Часть 3: Использование диалогов

В этой части мы сделаем проверку вводимых параметров по следующим правилам:

  • Число столбцов должно быть не меньше 5 и не больше 25.
  • Число строк должно быть не меньше 5 и не больше 35.
  • Начальное количество клеток должно быть не больше, чем ячеек на поле.

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

Простой диалог

Сначала добавим в класс StartActivity.java следующие константы:

// код результата проверки
private static final int ALERT_NONE = 0; // параметры введены верно
private static final int ALERT_COLUMNS = 1; // некорректное число столбцов
private static final int ALERT_ROWS = 2; // некорректное число строк
private static final int ALERT_CELLS = 3; // некорректное начальное число клеток
 
// границы допустимых значений числа столбцов
private static final int COLUMNS_MIN = 5;
private static final int COLUMNS_MAX = 25;
 
// границы допустимых значений числа строк
private static final int ROWS_MIN = 5;
private static final int ROWS_MAX = 35;

Теперь добавляем метод, осуществляющий проверку введенных параметров:

private int checkInputParameters(int cols, int rows, int cells)
{
 if (cols < COLUMNS_MIN || cols > COLUMNS_MAX)
 {
 return ALERT_COLUMNS;
 }
 
 if (rows < ROWS_MIN || rows > ROWS_MAX)
 {
 return ALERT_ROWS;
 }
 
 if (cells > rows * cols)
 {
 return ALERT_CELLS;
 }
 
 return ALERT_NONE;
}

Метод onClick теперь должен работать немного по-другому: сначала проверять введенные параметры, и, если проверка прошла (ALERT_NONE), открывать окно RunActivity, иначе же показывать предупреждение. Итак, onClick будет выглядеть так:

public void onClick(View v)
{
 EditText rowsEditor = (EditText)findViewById(R.id.rows_count);
 EditText colsEditor = (EditText)findViewById(R.id.columns_count);
 EditText cellsEditor = (EditText)findViewById(R.id.cells_count);
 
 int cols = Integer.parseInt(colsEditor.getText().toString());
 int rows = Integer.parseInt(rowsEditor.getText().toString());
 int cells = Integer.parseInt(cellsEditor.getText().toString());
 int alertCode = checkInputParameters(cols, rows, cells);
 if (alertCode != ALERT_NONE)
 {
 showDialog(alertCode);
 return;
 }
 Intent intent = new Intent();
 intent.setClass(this, RunActivity.class);
 
 intent.putExtra(RunActivity.EXT_COLS, cols);
 intent.putExtra(RunActivity.EXT_ROWS, rows);
 intent.putExtra(RunActivity.EXT_CELLS, cells);
 
 startActivity(intent);
 finish();
}

Метод showDialog(id) класса Activity пытается открыть диалог. При этом вызывается метод onCreateDialog, возвращающий объект класса Dialog. Так что нужно перекрыть метод onCreateDialog и сконструировать тот диалог, который нам нужен. Ну у нас тут всё просто, диалоги будут отличаться только выводимым сообщением, так что можно сделать следующее:

@Override
protected Dialog onCreateDialog(int id)
{
 DialogInterface.OnClickListener doNothing = new DialogInterface.OnClickListener()
 {
 public void onClick(DialogInterface dialog, int whichButton) 
 {
 }
 };
 int alertMessage;
 
 switch (id)
 {
 case ALERT_COLUMNS:
 alertMessage = R.string.alert_columns;
 break;
 case ALERT_ROWS:
 alertMessage = R.string.alert_rows;
 break;
 case ALERT_CELLS:
 alertMessage = R.string.alert_cells;
 break;
 default:
 return null;
 }
 
 return new AlertDialog.Builder(this)
 .setMessage(alertMessage)
 .setNeutralButton(R.string.ok, doNothing)
 .create(); 
}

В strings.xml при этом нужно добавить следующие значения:

<string name="alert_columns">Incorrect columns number: should be from 5 to 25</string>
<string name="alert_rows">Incorrect rows number: should be from 5 to 35</string>
<string name="alert_cells">Number of cells is greater then the size of grid</string>
<string name="ok">OK</string>

Итак, в методе onCreateDialog мы решили, какое сообщение (alertMessage) будем выводить, создали диалог с помощью AlertDialog.Builder, вывели туда сообщение, поставили единственную кнопку OK и привязали к ней обработчик doNothing, который ничего не делает (нам, в принципе, делать ничего и не надо). Аналогичным образом можно добавить иконку формы, добавить ещё кнопок и т.д.

Подробнее про то, как строятся диалоги, можно посмотреть в адроидовских сэмплах - там на самом деле все достаточно понятно и просто.

Теперь при вводе некорректных данных мы видим вот это:

Диалог для закрытия приложения

Добавим на форму RunActivity кнопку Close. Для этого напишем такую разметку в run.xml:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <TextView
 android:id="@+id/message"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:paddingBottom="10dip"
 />
 <Button
 android:id="@+id/close"
 android:text="@string/close"
 android:textStyle="bold"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 />

В strings.xml добавим следующие значения:

<string name="yes">Yes</string>
<string name="no">No</string>
<string name="close">Close</string>
<string name="submit_close">Are you sure you want to close this wonderful application?</string>

Теперь вносим изменения в класс RunActivity:

public class RunActivity extends Activity implements OnClickListener
{
 public static final String EXT_COLS = "cols";
 public static final String EXT_ROWS = "rows";
 public static final String EXT_CELLS = "cells";
 
 Button mCloseButton;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.run);
 
 mCloseButton = (Button) findViewById(R.id.close);
 mCloseButton.setOnClickListener(this);
 
 Bundle extras = getIntent().getExtras();
 int cols = extras.getInt(EXT_COLS);
 int rows = extras.getInt(EXT_ROWS);
 int cells = extras.getInt(EXT_CELLS);
 
 TextView message = (TextView)findViewById(R.id.message);
 message.setText("Rows: " + rows + "\nColumns: " + cols + "\nCells: " + cells);
 }
 
 public void onClick(View view)
 {
 AlertDialog.Builder builder = new AlertDialog.Builder(this);
 
 builder
 .setMessage(R.string.submit_close)
 // кнопка "Yes", при нажатии на которую приложение закроется
 .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener()
 {
 public void onClick(DialogInterface dialog, int whichButton) 
 {
 finish(); 
 }
 })
 // кнопка "No", при нажатии на которую ничего не произойдет
 .setNegativeButton(R.string.no, new DialogInterface.OnClickListener()
 {
 public void onClick(DialogInterface dialog, int whichButton) 
 {
 
 }
 })
 .show();
 }
}

Объяснять тут особо нечего, и так все понятно. Теперь, при нажатии на кнопку Close, мы видим следующее:

При нажатии на Yes приложение закроется, на No — продолжит работу.

Категория: Программирование | Добавил: Virus (28.11.2012)

Похожие темы на пост "Знакомство с Android. Часть 3: Использование диалогов"

  
Просмотров: 982 | Рейтинг: 0.0/0

Дорогие пользователи и гости сайта!!! Пожалуйста, если вам не сложно, оставте комментарий или ваше мнение о портале в Гостевой книге. Ваше мнение очень важно для нас и очень поможет в поиске дальнейшего пути развития сайта. С уважением, Администрация сайта AndroBum!



Так же рекомендуем:
Всего комментариев: 0
Информация:
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

[ Регистрация | Вход ]
Поиск

Мини-чат

Block title
Virus
файлов: 69
Постов: 38
Комментов: 1005
Репутация: 0
Ранг:

droid
файлов: 3
Постов: 0
Комментов: 0
Репутация: 100
Ранг:

Serge
файлов: 1
Постов: 0
Комментов: 0
Репутация: 0
Ранг:

Sergey
файлов: 1
Постов: 0
Комментов: 0
Репутация: 0
Ранг:

Аватар не установлен! Blackfoxxx
файлов: 0
Постов: 0
Комментов: 0
Репутация: 0
Ранг:


Друзья сайта
  • Официальный блог
  • скрипты, шаблоны, html, css
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Статистика Сайта
    Статистика сайта как на сайте

    Пользователей всего: +0
    Материалов всего [?]: +
    Онлайн всего: 3
    Гостей: 3
    Пользователей: 0
    Гости сайта Пользователи

    Яндекс.Метрика




    Пользователи онлайн:


    Flag Counter



    Все материалы размещенные на сайте принадлежат их владельцам.
    Copyright dodomo.do.am © 2010-2012