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

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

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




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

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
Olivka
Прошу прощения, записал как слышится произношение, моя ошибка =)

П.С. дневной марафон кодинга не прошел незаметно)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 апр 2013, 22:55 
Аватар пользователя

Зарегистрирован: 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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 апр 2013, 23:06 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
варианты:
1) самый лёгкий - запретить перерисовку на поворотах;
2) переопределить в активити onConfigurationChanged и при повороте всё время передавать интерфейс в фрагмент

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 апр 2013, 23:07 
Аватар пользователя

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
Нашел.

В общем CallBack нужно организовывать с использованием setTargetFragment() и getTargetFragment().

Пример кода раз: http://stackoverflow.com/questions/1156 ... ion-change
И два: http://stackoverflow.com/questions/1373 ... ogfragment


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

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
Я пошел по третьему варианту, уменьшил количество передаваемых параметров в фрагмент и выделил обратный вызов в отдельный интерфейс, который должен быть реализован в моем случае в активити. Вот код, того что получилось, может кому понадобится (как пример):
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public class FragmentDialogCalendarAct extends DialogFragment implements OnResultListener {
  2.        
  3.         private static final String KEY_SAVE_INSTANCE_DIALOG_CALENDAR_ACT_DATE_SELECT = "fragment:dialog_calendar_act:date_select";
  4.        
  5.         private Long DateSelectTS;
  6.         private sUserAccount Account;
  7.        
  8.         public FragmentDialogCalendarAct(){
  9.                 // Пустой конструктор для пересоздания в случае поворота экрана.
  10.                 DateSelectTS=null;
  11.         }
  12.  
  13.         public FragmentDialogCalendarAct(long _DateSelectTS){
  14.                 DateSelectTS = _DateSelectTS;
  15.         }      
  16.        
  17.         @Override
  18.         public void onCreate(Bundle savedInstanceState) {
  19.                 super.onCreate(savedInstanceState);
  20.                 Account = sUserAccount.getInstance(getSupportActivity());
  21.                 if(savedInstanceState!=null && DateSelectTS==null){
  22.                         DateSelectTS=savedInstanceState.getLong(KEY_SAVE_INSTANCE_DIALOG_CALENDAR_ACT_DATE_SELECT, fDAT.getUTSThisDayLong());
  23.                 }
  24.                 if(DateSelectTS==null){
  25.                         DateSelectTS=fDAT.getUTSThisDayLong();
  26.                 }
  27.         }
  28.        
  29.         @Override
  30.         public void onSaveInstanceState(Bundle outState) {
  31.                 super.onSaveInstanceState(outState);
  32.                 outState.putLong(KEY_SAVE_INSTANCE_DIALOG_CALENDAR_ACT_DATE_SELECT, DateSelectTS.longValue());
  33.         }
  34.  
  35.         @Override
  36.         public Dialog onCreateDialog(Bundle savedInstanceState) {                      
  37.                 elCalendarViewer dlgCalendar = new elCalendarViewer(getSupportActivity(), DateSelectTS.longValue(), (int) Account.getUserFirstDayOfWeek(), this);
  38.                 return dlgCalendar.getDialog();
  39.         }
  40.  
  41.         /**
  42.          * Реализация интерфейса elCalendarViewer.OnResultListener
  43.          */
  44.         @Override
  45.         public void onChangeDate(long _ts, String _date) {
  46.                 if(OnChangeDateUTSListener.class.isInstance(getSupportActivity())){
  47.                         try{
  48.                                 ((OnChangeDateUTSListener) getSupportActivity()).onChangeDateUTS(_ts);
  49.                         }finally{
  50.                                 // ничего не делаем
  51.                         }
  52.                 }                              
  53.         }      
  54.        
  55.         /**
  56.          * Интерфейс для обратного вызова.
  57.          */
  58.         public interface OnChangeDateUTSListener {
  59.                 public void onChangeDateUTS(long _ts);
  60.         }
  61.        
  62.                
  63. }


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

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
наименование класса sUserAccount с маленькой буквы, переменной DateSelectTS с большой... с меня за такое пол з/п сдёрли бы.

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


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

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
rezak90 писал(а):
наименование класса sUserAccount с маленькой буквы, переменной DateSelectTS с большой... с меня за такое пол з/п сдёрли бы.

Знаю, по поводу класса, это маленькое введение для себя:
s (маленькая) - обозначает, что класс отвечает за работу с настройками или их хранит.
f (маленькая) - обозначает, что класс содержит в себе функции для разных преобразований данных или их получения в нужном виде.
А в переменной обычно ставлю вначале буковку m, тут просто про неё забыл, код трансформировался быстро и главное было найти оптимальный вариант работы.

П.С. Но вообще, когда программа пишется для себя, каждый сам выбирает удобное обозначение переменных и классов.

П.П.С. дело не в написании, а в документированности написанного.


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

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
На доже привыкать писать правильно, другим же будет приятно и наглядно. А вдруг завтра какой то Google захочет купить твой проект, покажешь код и будет стыдно.

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


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

Зарегистрирован: 26 июл 2012, 10:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
Мне не стыдно, мне главное чтоб было удобно.
Основная часть кода пишется правильно (как ты выражаешься), а допущения с названиями классов сделаны осознанно и специально.


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

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
ладно заканчиваю троллить, код не смотрел просто те две строчки кинулись в глаза.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 май 2013, 22:18 

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
DialogFragment работает только с API > 10? Можно ли как-то заставить его работать с API > 7?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 май 2013, 22:24 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
igrok-vip писал(а):
DialogFragment работает только с API > 10? Можно ли как-то заставить его работать с API > 7?

Android Support Library

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


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

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опять нужна ваша помощь. Делаю всё по уроку. Но почему-то ошибка в вызове dlg1.show (The method show(FragmentManager, String) in the type DialogFragment is not applicable for the arguments (FragmentManager, String)), если использую Android Support Library. Как-то по другому нужно вызывать, если проект для android 2.1?

Вот код MainActivity
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. package com.example.test11;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.support.v4.app.DialogFragment;
  6. import android.view.Menu;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10.  
  11. public class MainActivity extends Activity implements OnClickListener{
  12.  
  13.         DialogFragment dlg1;
  14.         Button btn1;
  15.        
  16.         @Override
  17.         protected void onCreate(Bundle savedInstanceState) {
  18.                 super.onCreate(savedInstanceState);
  19.                 setContentView(R.layout.activity_main);
  20.                 dlg1 = new dialog1();
  21.                 btn1 =(Button)findViewById(R.id.btnDlg1);
  22.                 btn1.setOnClickListener(this);
  23.         }
  24.  
  25.         @Override
  26.         public boolean onCreateOptionsMenu(Menu menu) {
  27.                 // Inflate the menu; this adds items to the action bar if it is present.
  28.                 getMenuInflater().inflate(R.menu.main, menu);
  29.                 return true;
  30.         }
  31.  
  32.         public void onClick(View v) {
  33.             switch (v.getId()) {
  34.             case R.id.btnDlg1:
  35.               dlg1.show(getFragmentManager(), "dlg1");
  36.               break;
  37.             default:
  38.               break;
  39.             }
  40.  
  41. }
  42. }


Вод диалога
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. package com.example.test11;
  2.  
  3.  
  4. import android.content.DialogInterface;
  5. import android.os.Bundle;
  6. import android.support.v4.app.DialogFragment;
  7. import android.util.Log;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.ViewGroup;
  12. import android.widget.Button;
  13.  
  14. public class dialog1 extends DialogFragment implements OnClickListener {
  15.  
  16.   final String LOG_TAG = "myLogs";
  17.  
  18.   public View onCreateView(LayoutInflater inflater, ViewGroup container,
  19.       Bundle savedInstanceState) {
  20.     getDialog().setTitle("Title!");
  21.     View v = inflater.inflate(R.layout.dialog1, null);
  22.     v.findViewById(R.id.btnYes).setOnClickListener(this);
  23.     v.findViewById(R.id.btnNo).setOnClickListener(this);
  24.     v.findViewById(R.id.btnMaybe).setOnClickListener(this);
  25.     return v;
  26.   }
  27.  
  28.   public void onClick(View v) {
  29.     Log.d(LOG_TAG, "Dialog 1: " + ((Button) v).getText());
  30.     dismiss();
  31.   }
  32.  
  33.   public void onDismiss(DialogInterface dialog) {
  34.     super.onDismiss(dialog);
  35.     Log.d(LOG_TAG, "Dialog 1: onDismiss");
  36.   }
  37.  
  38.   public void onCancel(DialogInterface dialog) {
  39.     super.onCancel(dialog);
  40.     Log.d(LOG_TAG, "Dialog 1: onCancel");
  41.   }
  42. }


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 май 2013, 17:49 

Зарегистрирован: 29 апр 2013, 11:53
Сообщений: 56
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Убираю import android.support.v4.app.DialogFragment; ставлю import android.app.DialogFragment; - всё работает.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 май 2013, 14:07 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
igrok-vip писал(а):
Убираю import android.support.v4.app.DialogFragment; ставлю import android.app.DialogFragment; - всё работает.

У вас смешались основные и support классы. Посмотрите Урок 114. Там есть пример как работать с фрагментами с использованием Support Library. Там другой наследуемый класс для Activity, другой класс FragmentManager, другой метод для получения FragmentManager.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 31 май 2013, 00:05 

Зарегистрирован: 12 дек 2012, 00:58
Сообщений: 11
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Здравствуйте,
Такая задача. Есть ListView с картинкой и текстом. Нужно сделать так, чтобы при OnItemClick картинка открывалась поверх основного Активити. Я так подозреваю, что это нужно делать через DialogFragment, но не могу придумать, как передать в DialogFragment картинку.

Спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 31 май 2013, 00:33 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
asolovey писал(а):
Здравствуйте,
Такая задача. Есть ListView с картинкой и текстом. Нужно сделать так, чтобы при OnItemClick картинка открывалась поверх основного Активити. Я так подозреваю, что это нужно делать через DialogFragment, но не могу придумать, как передать в DialogFragment картинку.

Спасибо!

передавать нужно путь к картинке, или же bitmap в bundle пихать, но лучше всё таки путь

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 31 май 2013, 00:42 

Зарегистрирован: 12 дек 2012, 00:58
Сообщений: 11
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
rezak90,
А Вы могли бы написать конкретнее, как это сделать(я новичок в Андроид). Вот сниппеты кода из DialogFragment и OnItemClick
Код: [ Загрузить ] [ Скрыть ]
  1. public class ImageFragment extends DialogFragment { 
  2.      
  3.      
  4.      
  5.     @Override 
  6.     public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
  7.          
  8.         getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
  9.         // Inflating layout for the dialog  
  10.         View v = inflater.inflate(R.layout.single_image, null); 
  11.         ImageView fclogo = (ImageView) v.findViewById(R.id.singleimage); 
  12.  
  13.         Bundle b = getArguments(); 
  14.  
  15.                  
  16.         return v; 
  17.     } 
  18.  
  19.      


Код: [ Загрузить ] [ Скрыть ]
  1. public void onItemClick(AdapterView<?> item, View v, 
  2.                     int position, long id) { 
  3.  
  4.                 //Drawable d = getResources().getDrawable(position); 
  5.  
  6.                  
  7.                  // Instantiating TimeDailogFragment, which is a  DialogFragment object  
  8.                     ImageFragment imFragment = new ImageFragment(); 
  9.                    
  10.                   // Creating a bundle object to store the position of the selected country  
  11.                   Bundle b = new Bundle(); 
  12.                   
  13.                  // Storing the position in the bundle object 
  14.                  b.putInt("position", position); 
  15.                    
  16.                   // Setting the bundle object as an argument to the DialogFragment object  
  17.                  imFragment.setArguments(b); 
  18.                   
  19.                  // Getting FragmentManager object  
  20.                  FragmentManager fragmentManager = getFragmentManager(); 
  21.                   
  22.                   // Starting a FragmentTransaction  
  23.                  FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
  24.                    
  25.                  // Getting the previously created fragment object from the fragment manager  
  26.                  ImageFragment imPrev = (ImageFragment)fragmentManager.findFragmentByTag("time_dialog"); 
  27.                   
  28.                  // If the previously created fragment object stillexists, then that has to be removed  
  29.                  if(imPrev!=null) 
  30.                  fragmentTransaction.remove(imPrev); 
  31.                   
  32.                   // Opening the fragment object 
  33.                  imFragment.show(fragmentTransaction, "time_dialog"); 
  34.                   
  35.             } 
  36.  
  37.         }; 


Спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 31 май 2013, 06:14 

Зарегистрирован: 30 май 2013, 12:27
Сообщений: 12
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Может и я когда-нибудь дочитаю до этого урока :geek:


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

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


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

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