Урок 62. Диалоги. AlertDialog. Список
Урок 62. Диалоги. AlertDialog. Список
В этом уроке:
- формируем список в диалоге
[url=http://www.startandroid.ru/ru/uroki/vse ... l:lcmvevzb]Click here to read this article![/url:lcmvevzb]
- формируем список в диалоге
[url=http://www.startandroid.ru/ru/uroki/vse ... l:lcmvevzb]Click here to read this article![/url:lcmvevzb]
Последний раз редактировалось damager82 12 май 2017, 11:55, всего редактировалось 13 раз.
-
- Сообщения: 21
- Зарегистрирован: 30 янв 2012, 21:15
Re: Урок 62. Диалоги. AlertDialog. Список
Сегодня увидел что методы onCreateDialog и onPrepareDialog на сайте http://developer.android.com подписаны как "This method is deprecated." и рекомендуют использовать DialogFragment.
This method is deprecated.
Use the new DialogFragment class with FragmentManager instead; this is also available on older platforms through the Android compatibility package.
Может вы вставите маленький курс по этому новому методу.
This method is deprecated.
Use the new DialogFragment class with FragmentManager instead; this is also available on older platforms through the Android compatibility package.
Может вы вставите маленький курс по этому новому методу.
Re: Урок 62. Диалоги. AlertDialog. Список
Вот вариант использования DialogFragment взамен Dialog (применительно к AlertDialod).
Я практичестки взял готовые конструкции из http://developer.android.com/intl/ru/re ... gment.html добавил только передачу текста сообщения (message) помимо заголовка (title).
В примере два поля для ввода, одно для ввода заголовка диалога и второе для сообщения и одна кнопка вызова диалога. Иконка и текст для кнопок взяты из стандартных ресурсов Андроид.
main.xml
MainActivity.java
Пример будет работать только с API старше 11-й версии. Для совместимости с младшими версиями нужно использовать библиотеку совместимости. При этом все Activity использующие фрагменты нужно наследовать от FragmentActivity из пакета android.support.v4.app, разумеется DialogFragment тоже должен быть из android.support.v4.app.DialogFragment. Вместо метода getFragmentManager() нужно вызывать getSupportFragmentManager() .
В общем-то все просто, кода чуть больше.
Я практичестки взял готовые конструкции из http://developer.android.com/intl/ru/re ... gment.html добавил только передачу текста сообщения (message) помимо заголовка (title).
В примере два поля для ввода, одно для ввода заголовка диалога и второе для сообщения и одна кнопка вызова диалога. Иконка и текст для кнопок взяты из стандартных ресурсов Андроид.
main.xml
Код: Выделить всё
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Title" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/Message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Message" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Show Alert" />
</LinearLayout>
Код: Выделить всё
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;//Android API 11 и выше
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
//Для совместимости с API от 4-й версии нужно использовать библиотеку совместимости
//import android.support.v4.app.DialogFragment;
//import android.support.v4.app.FragmentActivity;
//При использовании библиотеки совместимости Activity заменить на FragmentActivity
public class MainActivity extends Activity {
final String LOG_TAG = "myLogs";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void onClick(View v) {
String title = ((EditText) findViewById(R.id.Title)).getText().toString();
String message = ((EditText) findViewById(R.id.Message)).getText().toString();
showAlert(title, message);
}
//Вызов диалога
private void showAlert(String _title, String _message) {
DialogFragment newFragment = MyAlert.newInstance(_title, _message);
//При использовании библиотеки совместимости вызывать getSupportFragmentManager()
//вместо getFragmentManager()
newFragment.show(getFragmentManager(), "dialog");
}
//Обработка нажатия позитивной кнопки
public void doPositiveClick() {
Log.d(LOG_TAG, "Pressed OK button");
}
//Обработка нажатия негативной кнопки
public void doNegativeClick() {
Log.d(LOG_TAG, "Pressed Cancel button");
}
public static class MyAlert extends DialogFragment {
public static MyAlert newInstance(String title, String message) {
MyAlert frag = new MyAlert();
Bundle args = new Bundle();
args.putString("title", title);
args.putString("message", message);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle args = getArguments(); //Получаем заголовок и сообщение
String title = args.getString("title");
String message = args.getString("message");
return new AlertDialog.Builder(getActivity())
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(title)
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int whichButton) {
((MainActivity) getActivity()).doPositiveClick();
}
})
.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int whichButton) {
((MainActivity) getActivity()).doNegativeClick();
}
})
.create();
}
}
}
В общем-то все просто, кода чуть больше.
Re: Урок 62. Диалоги. AlertDialog. Список
Вот не понимаю я гугловцев. Столько наставлений расписали по части стайлинга приложений Андроид, чтоб интерфейс был однообразен для пользователей и пр., а сами допускают какие-то лишенные всякой логики ляпы.
К примеру, порядок кнопок в AlertDialog для некоторых тем (в частности HOLO) они применили обратный (т.е. позитивная кнопка справа), для чего? Где здесь логика? Для левшей? Допустим, пользователь вводит какой-то длинный текст, нажав на кнопку Back будет, скажем, предложен диалог сохранения и он вполне может по запарке клацнуть кнопку отмены вместо "ОК".
К примеру, порядок кнопок в AlertDialog для некоторых тем (в частности HOLO) они применили обратный (т.е. позитивная кнопка справа), для чего? Где здесь логика? Для левшей? Допустим, пользователь вводит какой-то длинный текст, нажав на кнопку Back будет, скажем, предложен диалог сохранения и он вполне может по запарке клацнуть кнопку отмены вместо "ОК".
Re: Урок 62. Диалоги. AlertDialog. Список
Да, где-то в конце августа я начну выкладывать материалы по новшествам третьего андроида.Jack_killer писал(а):Сегодня увидел что методы onCreateDialog и onPrepareDialog на сайте http://developer.android.com подписаны как "This method is deprecated." и рекомендуют использовать DialogFragment.
This method is deprecated.
Use the new DialogFragment class with FragmentManager instead; this is also available on older platforms through the Android compatibility package.
Может вы вставите маленький курс по этому новому методу.
Re: Урок 62. Диалоги. AlertDialog. Список
А зачем третьего? переходите сразу на четвёртый
http://developer.android.com/intl/ru/ab ... index.html
2.3.3 Gingerbread вытесняет 2.2 Froyo, а сам вытесняется 4.0.3 Ice Cream Sandwich
А доля Honeycomb 3.0-3.2 вряд ли будет увеличиваться.
http://developer.android.com/intl/ru/ab ... index.html
2.3.3 Gingerbread вытесняет 2.2 Froyo, а сам вытесняется 4.0.3 Ice Cream Sandwich
А доля Honeycomb 3.0-3.2 вряд ли будет увеличиваться.
Re: Урок 62. Диалоги. AlertDialog. Список
Куда ни кинь - всюду клин! Делаю диалог, в который показываю список из курсора. Как я понимаю, там внутри из курсора формируется список и Listener возвращает мне номер строки ЭТОГО СПИСКА, по которой я кликнул.
Но мне-то надо id ТОЙ ЗАПИСИ КУРСОРА, по которой я кликнул!!!
Пусть у меня в таблице данные:
2 Яша
3 Петя
4 Саша
И пусть они в курсоре именно в таком порядке.
Я кликнул в Петю. Мне вернулся выбор - 1.
А если я курсор отсортирую по алфавиту:
3 Петя
4 Саша
2 Яша
То, при выборе Пети я получаю - 0.
А как мне получить Петин id, равный 3?
Но мне-то надо id ТОЙ ЗАПИСИ КУРСОРА, по которой я кликнул!!!
Пусть у меня в таблице данные:
2 Яша
3 Петя
4 Саша
И пусть они в курсоре именно в таком порядке.
Я кликнул в Петю. Мне вернулся выбор - 1.
А если я курсор отсортирую по алфавиту:
3 Петя
4 Саша
2 Яша
То, при выборе Пети я получаю - 0.
А как мне получить Петин id, равный 3?
Re: Урок 62. Диалоги. AlertDialog. Список
Глупость спросил Не пинайте, плз.
Re: Урок 62. Диалоги. AlertDialog. Список
Cursor привязан к ListView? и какой адаптер используете? Лучше использовать комбинацию ListView+Cursor+SimpleCursorAdapter что и позволяет решать выше описанные проблемы.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 62. Диалоги. AlertDialog. Список
Нее. Мой глупый вопрос был вызван тем, что я "забыл", что имею дело с курсором, а не с реляционной таблицей. В курсоре-то строки нумерованы, а значит по позиции в списке я могу однозначно получить строку курсора. А в ней уже есть все необходимые данные.
Re: Урок 62. Диалоги. AlertDialog. Список
Не запускается полная копипаста кода
Re: Урок 62. Диалоги. AlertDialog. Список
Ну ошибка "no such table" говорит собственно о том что не найдена таблица mytabVici писал(а):Не запускается полная копипаста кода
А не найдена она потому что скорее всего не создана.
А не создана она скорее всего потому что не вызвался метод db.execSQL(DB_CREATE);
А почему он не вызвался я не знаю, скорее всего какой-то кусок кода недокопировали.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 62. Диалоги. AlertDialog. Список
Забавно: пересоздал точно такой же проект и всё заработало. Может глюк eclipse?anber писал(а):Ну ошибка "no such table" говорит собственно о том что не найдена таблица mytabVici писал(а):Не запускается полная копипаста кода
А не найдена она потому что скорее всего не создана.
А не создана она скорее всего потому что не вызвался метод db.execSQL(DB_CREATE);
А почему он не вызвался я не знаю, скорее всего какой-то кусок кода недокопировали.
Re: Урок 62. Диалоги. AlertDialog. Список
Бывает что он использует устаревшие данные иногда кое-что приходится вручную обновлять, типа refreshVici писал(а):Забавно: пересоздал точно такой же проект и всё заработало. Может глюк eclipse?anber писал(а):Ну ошибка "no such table" говорит собственно о том что не найдена таблица mytabVici писал(а):Не запускается полная копипаста кода
А не найдена она потому что скорее всего не создана.
А не создана она скорее всего потому что не вызвался метод db.execSQL(DB_CREATE);
А почему он не вызвался я не знаю, скорее всего какой-то кусок кода недокопировали.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 62. Диалоги. AlertDialog. Список
Не получилось из OnClickListener достучаться до значения самих выбираемых пунктов)
Это возможно? или возможно только создавать глобальную переменную и присваивать ей значение в onPrepareDialog?
Это возможно? или возможно только создавать глобальную переменную и присваивать ей значение в onPrepareDialog?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 62. Диалоги. AlertDialog. Список
Откуда не удалось достучаться, куда не удалось достучаться, непонятно.
Re: Урок 62. Диалоги. AlertDialog. Список
no--
Код: Выделить всё
// обработчик нажатия на пункт списка диалога
DialogInterface.OnClickListener myClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String item=null;
switch(dialogId) {
case DIALOG_ITEMS:
case DIALOG_ADAPTER:
item=((AlertDialog)dialog).getListView().getItemAtPosition(which).toString();
break;
case DIALOG_CURSOR:
cursor = db.getAllData();
item=???
break;
}
// выводим в лог позицию нажатого элемента
Log.d(LOG_TAG,"which = "+which+" ("+item+")");
}
};
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 62. Диалоги. AlertDialog. Список
Все равно понять не могу. Что надо получить? Имя нажатого View элемента? Его позицию?
Re: Урок 62. Диалоги. AlertDialog. Список
Его текст... для первых двух диалогов я его получил, а в случии с курсором не выходит
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 62. Диалоги. AlertDialog. Список
Ладно, особо не могу понять что там не так. Что за ошибку пишет?