Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 23 июл 2019, 17:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 89 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: 10 дек 2013, 11:50 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
Foenix писал(а):
для этого когда-то было "контекстное меню", но теперь оно deprecated, используй
http://developer.android.com/design/pat ... contextual

вижу кто то вебинар смотрел ;)

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 дек 2013, 19:39 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
а кто-то пропустил!
Хотя толку? народ уже контекстное меню за свое личное изобретение считает. Это что значит? Что даже винда не установлена на компе?

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 дек 2013, 07:24 

Зарегистрирован: 30 мар 2013, 22:52
Сообщений: 223
Благодарил (а): 14 раз.
Поблагодарили: 11 раз.
Foenix писал(а):
для этого когда-то было "контекстное меню", но теперь оно deprecated, используй
http://developer.android.com/design/pat ... contextual


Спасибо. Разобрался с ActionBar, с ActionBarSherlock, с ActionMode,с ActionBarSherlock+ActionMode. все сделал. не понравилось :)

нужно контекстное меню прямо на нажатом эллементе со стрелочкой :) чтото вроде PopUpMenu

Решение такое:
Обработчик на списке:
Код: [ Загрузить ] [ Скрыть ]
  1. lvSimple.setOnItemLongClickListener(new OnItemLongClickListener() { 
  2.             public  boolean onItemLongClick(AdapterView<?> parent, final View view, 
  3.                     int position, long id) { 
  4.                  
  5.                 int[] location = new int[2]; 
  6.                 view.getLocationOnScreen(location); 
  7.  
  8.                 // в backView сохраняем текущий фон итема (у меня он у многих итемов разный. 
  9.                 backView = view.findViewById(R.id.list_item_lay).getBackground(); 
  10.                // устанавливаем фон затемнения (нажатия) 
  11.                 view.findViewById(R.id.list_item_lay).setBackgroundResource(R.drawable.item_selected_pressed_mystyle); 
  12.                   
  13.                 Point point = new Point(); 
  14.                 point.x = location[0]; 
  15.                 point.y = (int) (location[1]+view.getHeight()-40); 
  16.                 //если не шерлок то здесь как то подругому надо прописать, например getActivity() 
  17.                 showPopup(getSherlockActivity(), point); 
  18.       
  19.                  return true; 
  20.             } 
  21.              }); 


сама процедура(метод) или как там оно называется
Код: [ Загрузить ] [ Скрыть ]
  1. private void showPopup(Activity context, Point p) { 
  2.  
  3.         LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  4. // R.layout.popup_menu - это мой кастомный слой с тремя кнопочками графическими  
  5.        View layout = layoutInflater.inflate(R.layout.popup_menu, null); 
  6.  
  7.        PopupWindow PopUp = new PopupWindow(context); 
  8.        PopUp.setContentView(layout); 
  9.        PopUp.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);   
  10.        PopUp.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); 
  11.        PopUp.setFocusable(true);     
  12.  
  13.        PopUp.setBackgroundDrawable(new BitmapDrawable()); 
  14.            PopUp.showAtLocation(layout, Gravity.NO_GRAVITY, p.x, p.y); 
  15.        //Немножко анимации 
  16.            Animation anim = AnimationUtils.loadAnimation(getSherlockActivity(), R.anim.my_alpha);  
  17.        layout.startAnimation(anim);       
  18.        // ловим уничтожение чтобы заменить слой на тот который был. 
  19.        PopUp.setOnDismissListener(new OnDismissListener(){ 
  20.  
  21.             @Override 
  22.             public void onDismiss() { 
  23.                 Log.d("asd","уничтожился СУКА !"); 
  24.                 viewItemList.findViewById(R.id.list_item_lay).setBackgroundDrawable(backView); 
  25.             } 
  26.              
  27.              
  28.         }); 
  29.          
  30.     } 


велосипед? ;)

_________________
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 ноя 2014, 16:29 

Зарегистрирован: 13 окт 2014, 13:58
Сообщений: 10
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Цитата:
Есть еще один вариант вызова диалога. Это метод show, но на вход он уже принимает не FragmentManager, а FragmentTransaction. В этом случае система также сама вызовет commit внутри show, но мы можем предварительно поместить в созданную нами транзакцию какие-либо еще операции или отправить ее в BackStack.


Можно ли после закрытия диалога вернуть его кнопкой "Назад"?

Код из урока, вызов второго диалога методом show с FragmentTransaction, добавленной в BackStack:

Код: [ Загрузить ] [ Скрыть ]
  1. import android.app.Activity; 
  2. import android.app.DialogFragment; 
  3. import android.app.FragmentTransaction; 
  4. import android.os.Bundle; 
  5. import android.view.View; 
  6. import android.widget.Toast; 
  7.  
  8. public class MainActivity extends Activity { 
  9.  
  10.     DialogFragment dlg1; 
  11.     DialogFragment dlg2; 
  12.     FragmentTransaction ft; 
  13.     int bsID; 
  14.  
  15.     @Override 
  16.     public void onCreate(Bundle savedInstanceState) { 
  17.         super.onCreate(savedInstanceState); 
  18.         setContentView(R.layout.main); 
  19.         dlg1 = new Dialog1(); 
  20.         dlg2 = new Dialog2(); 
  21.     } 
  22.  
  23.     public void onClick(View v) { 
  24.         switch (v.getId()) { 
  25.         case R.id.btnDlg1: 
  26.             dlg1.setCancelable(false); 
  27.             dlg1.show(getFragmentManager(), "dlg1"); 
  28.             break; 
  29.         case R.id.btnDlg2: 
  30.             ft = getFragmentManager().beginTransaction(); 
  31.             ft.addToBackStack(null); 
  32.             dlg1.setCancelable(false); 
  33.             bsID = dlg2.show(ft, "dlg2"); 
  34.             Toast.makeText(this, "bsID = " + bsID, Toast.LENGTH_SHORT).show(); 
  35.             break; 
  36.         default: 
  37.             break; 
  38.         } 
  39.  
  40.     } 


Открываю приложение, вызываю диалог, закрываю, жму "Назад" - приложение закрывается.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 ноя 2014, 17:47 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
Все правильно работает. Закрытие диалога равносильно нажатию кнопки назад. Вот если вы сразу откроете 2 диалога первый поместится в стек и вернется после нажатия кнопки назад.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 00:08 

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Я использую DialogFragment для подтверждения удаления записи из листвью. Т.е. в диалоге есть 2 кнопки "Да" и "Нет". И если была нажата "Да", то в основном активити с листвью нужно удалить запись. Подскажите как это можно реализовать?
Т.е. в основном активити я нажимаю "Удалить" - открывается диалог, где я нажимаю "Да", после чего диалог закрывается и основное активити должно как-то понять, что сейчас нужно удалить запись. Или не нужно, если была нажата "Нет".
Есть ли какой-то механизм ожидания сообщения от диалога или что-то типа того? Или в диалог нужно отправлять id записи и внутри диалога подключаться к базе по новой? Но тогда после закрытия диалога всё-равно в какой-то момент нужно обновить список, чтобы удалилась запись. В какой?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 00:35 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
можно из диалога запись удалить, разница небольшая. Нажата окей - удаляем. Можно организовать колбек - вызов метода при закрытии диалога в активити, которая реализует нужный интерфейс. Этот механизм тоже в уроках описан. Посмотри 106 после слов "Обработка в Activity события из фрагмента "

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 12:15 

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Глянул 106й урок. Сложновато для простого подтверждения наверно.
Пока пытаюсь сделать первым способом, но есть тоже пара проблем:
Почему-то не передаётся параметр id в диалог
MainActivity.java
Код: [ Загрузить ] [ Скрыть ]
  1. Bundle bnd = new Bundle(); 
  2. bnd.putInt("id", (int) acmi.id); 
  3. dlg1.setArguments(bnd); 
  4. dlg1.show(getFragmentManager(), "dlg1"); 


Dialog1.java
Код: [ Загрузить ] [ Скрыть ]
  1. int id = 999; 
  2. getArguments().getInt("id", -1); 
  3. Log.d("Dialog", "id = "+id); 


Результат - 999.

И ещё сразу. Как после удаления записи в бд из диалога обновить listview в activity?
Там для этого используется SimpleCursorAdapter и getSupportLoaderManager().getLoader(0).forceLoad();


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 12:21 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Неправильно в диалоге ты делаешь.. Почитай уроки.. Там надо инстанс создавать..
Чтоб обновить данные в листвью вызвать notifydatasetchanged
Либо использовать лоадеры и контент провайдер

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 13:11 

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Передать параметр в диалог получилось. Я же id то никуда не помещал)). Запись удаляется. Но всё-равно не пойму как обновить ListView.
Как вызвать этот notifydatasetchanged?
Как из диалога получить доступ к адаптеру и вызвать для него notifydatasetchanged?
Или изучать лоадеры и контент провайдеры?)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 13:20 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Нет из диалога доступа к адаптеру.
Изучай если тебе всерьёз и надолго.
Если просто побыстрее то изучай что я описывала выше - колбеки, которые ты назвал сложным подходом. Однако эта штука используется тоже повсеместно и везде пригодится.

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 13:24 

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Спасибо. Тогда буду изучать колбеки)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 14:37 

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Блин опять проблема. Я сейчас сделал листвью с использованием SimpleCursorAdapter. Для него нужно чтобы активити реализовывало интерфейс LoaderCallbacks<Cursor>. Для того, чтобы вызвать метод в активити нужно чтобы оно реализовывало интерфейс из диалога. Но когда я пытаюсь реализовать оба этих интерфейса

Код: [ Загрузить ] [ Скрыть ]
  1. public class MainActivity extends FragmentActivity  implements LoaderCallbacks<Cursor> implements Dialog_del_pc.onSomeEventListener{ 
  2. ...} 


AndroidStudio выделяет всё красным и выдаёт ошибку "'class' or 'interface' expected"
В андроид нельзя реализовывать несколько интерфейсов сразу или я опять что-то не так делаю?)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 15:10 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
два раза слово implements писать не надо, через запятую перечисляй

_________________
R.id.team

NullPointerException - что делать???
http://forum.startandroid.ru/viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
http://forum.startandroid.ru/viewtopic.php?f=60&t=3198


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 15:15 

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Спасибо ещё раз. Не сталкивался пока с интерфейсами)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 07 июн 2015, 12:17 

Зарегистрирован: 07 июн 2015, 12:08
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте я использовал примеры из урока и у меня выдало ошибки:
dlg1 = new Dialog1(); - здесь говорит что Cannot resolve constructor "Dialog1()"
dlg1.show(getFragmentManager(), "dlg1"); - здесь говорит что Cannot resolve method "getFragmentManager()"
В проекте у меня minSdkVersion 11; targetSdkVersion 21.
Диалоги пытаюсь вызвать из класса конструктора.
Второй тип диалога dlg2 = new Dialog2(); - все нормально, здесь ничего не подчеркнул.
Но в dlg2.show(getFragmentManager(), "dlg2"); - та же ошибка что и в первом случае


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 июн 2015, 01:16 

Зарегистрирован: 13 июн 2015, 00:59
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте, товарищи.

Работая с DialogFragment столкнулся с ошибкой, которая заставила меня усомниться в понимании базовых механизмов работы с фрагментами, посему и хочу задать здесь свой вопрос.
Строю простенькое приложение, в его основе Activity, которая сама толком ничего не делает, а добавляет и заменяет на себе фрагменты. Итак, сразу после запуска приложения добавляется фрагмент, зовут его Initial. После нажатия на одну из кнопок, вызывается кастомный DialogFragment, цель которого - получить текст в EditText и обработать нажатие на кнопку.

У нужной мне кнопки стоит в XML'ке onClick:
android:id="@+id/btnDlgAdd"
...
android:onClick="dlgAddPlayer"

Далее, в java-классе для этого DialogFragment есть обработка этого метода:
public void dlgAddPlayer(View v) { ... }

Однако по её нажатию получаю ошибку:
java.lang.IllegalStateException: Could not find a method dlgAddPlayer(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'btnDlgAdd'

Что лично меня напрягает, так это строка о том, что метод не найден "in the activity class". Быть может, я не туда ввожу обработчик нажатия? Куда передаётся этот запрос onClick? (для верности я добавил его и в родительский фрагмент и в саму activity, но не помогло).

P.S.: посмотрел пачку аналогичных проблем на stackoverflow, однако решения не нашёл. Буду благодарен за советы или наводки на что почитать.
P.P.S.: насколько оправдан подход избегания множества активностей? Лично мне показалось логичным работать не со множеством активностей, а с одной активностью и множеством фрагментов, особенно при условии будущей адаптации под планшеты. Но пока это лишь теория, хотелось бы услышать мнение практиков.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 июн 2015, 02:05 
Аватар пользователя

Зарегистрирован: 23 ноя 2013, 16:08
Сообщений: 1107
Откуда: Ukraine
Благодарил (а): 31 раз.
Поблагодарили: 176 раз.
Light310 писал(а):
Здравствуйте, товарищи.

Работая с DialogFragment столкнулся с ошибкой, которая заставила меня усомниться в понимании базовых механизмов работы с фрагментами, посему и хочу задать здесь свой вопрос.
Строю простенькое приложение, в его основе Activity, которая сама толком ничего не делает, а добавляет и заменяет на себе фрагменты. Итак, сразу после запуска приложения добавляется фрагмент, зовут его Initial. После нажатия на одну из кнопок, вызывается кастомный DialogFragment, цель которого - получить текст в EditText и обработать нажатие на кнопку.

У нужной мне кнопки стоит в XML'ке onClick:
android:id="@+id/btnDlgAdd"
...
android:onClick="dlgAddPlayer"

Далее, в java-классе для этого DialogFragment есть обработка этого метода:
public void dlgAddPlayer(View v) { ... }

Однако по её нажатию получаю ошибку:
java.lang.IllegalStateException: Could not find a method dlgAddPlayer(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'btnDlgAdd'

Что лично меня напрягает, так это строка о том, что метод не найден "in the activity class". Быть может, я не туда ввожу обработчик нажатия? Куда передаётся этот запрос onClick? (для верности я добавил его и в родительский фрагмент и в саму activity, но не помогло).

P.S.: посмотрел пачку аналогичных проблем на stackoverflow, однако решения не нашёл. Буду благодарен за советы или наводки на что почитать.
P.P.S.: насколько оправдан подход избегания множества активностей? Лично мне показалось логичным работать не со множеством активностей, а с одной активностью и множеством фрагментов, особенно при условии будущей адаптации под планшеты. Но пока это лишь теория, хотелось бы услышать мнение практиков.



Найди кнопку в фрагменте и вручную накинь обработчик
Button btn = (Button) mainContainer.findView...
btn .setOnClick...

_________________
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 июн 2015, 13:16 

Зарегистрирован: 13 июн 2015, 00:59
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
doter.ua писал(а):
Найди кнопку в фрагменте и вручную накинь обработчик
Button btn = (Button) mainContainer.findView...
btn .setOnClick...

Помогло, большое спасибо!

Хотя мне, конечно, интересно, почему в родительском фрагменте нормально срабатывает onClick, прописанный в XML, а здесь нужно его привязывать вручную.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 02 авг 2015, 02:01 

Зарегистрирован: 17 июл 2015, 14:17
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте. C помощью someEventListener я из фрагмента передаю строку в DialogFragment, который меняет содержимое EditText на мою строку.
Код: [ Загрузить ] [ Скрыть ]
  1. Bundle bundle = getArguments(); 
  2. String s = bundle.getString("key"); 
  3. ((EditText)v.findViewById(R.id.eDevice)).setText(s); 

При следующей передаче строки диалог остается прежним, значение EditText не меняется, т.к. диалог не удаляется.
Как при каждом вызове диалога обновлять его \ создавать его заново?
--
PS.Желаемый мною эффект происходит при повороте экрана.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 89 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB