Урок 110. Android 3. Fragments. DialogFragment - диалог
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Olivka
Прошу прощения, записал как слышится произношение, моя ошибка =)
П.С. дневной марафон кодинга не прошел незаметно)
Прошу прощения, записал как слышится произношение, моя ошибка =)
П.С. дневной марафон кодинга не прошел незаметно)
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
ну теперь-то и я поняла.
Проверила один из диалогов - ниче вроде не слетает..
Проверила один из диалогов - ниче вроде не слетает..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
варианты:
1) самый лёгкий - запретить перерисовку на поворотах;
2) переопределить в активити onConfigurationChanged и при повороте всё время передавать интерфейс в фрагмент
1) самый лёгкий - запретить перерисовку на поворотах;
2) переопределить в активити onConfigurationChanged и при повороте всё время передавать интерфейс в фрагмент
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Нашел.
В общем CallBack нужно организовывать с использованием setTargetFragment() и getTargetFragment().
Пример кода раз: http://stackoverflow.com/questions/1156 ... ion-change
И два: http://stackoverflow.com/questions/1373 ... ogfragment
В общем CallBack нужно организовывать с использованием setTargetFragment() и getTargetFragment().
Пример кода раз: http://stackoverflow.com/questions/1156 ... ion-change
И два: http://stackoverflow.com/questions/1373 ... ogfragment
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Я пошел по третьему варианту, уменьшил количество передаваемых параметров в фрагмент и выделил обратный вызов в отдельный интерфейс, который должен быть реализован в моем случае в активити. Вот код, того что получилось, может кому понадобится (как пример):
Код: Выделить всё
public class FragmentDialogCalendarAct extends DialogFragment implements OnResultListener {
private static final String KEY_SAVE_INSTANCE_DIALOG_CALENDAR_ACT_DATE_SELECT = "fragment:dialog_calendar_act:date_select";
private Long DateSelectTS;
private sUserAccount Account;
public FragmentDialogCalendarAct(){
// Пустой конструктор для пересоздания в случае поворота экрана.
DateSelectTS=null;
}
public FragmentDialogCalendarAct(long _DateSelectTS){
DateSelectTS = _DateSelectTS;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Account = sUserAccount.getInstance(getSupportActivity());
if(savedInstanceState!=null && DateSelectTS==null){
DateSelectTS=savedInstanceState.getLong(KEY_SAVE_INSTANCE_DIALOG_CALENDAR_ACT_DATE_SELECT, fDAT.getUTSThisDayLong());
}
if(DateSelectTS==null){
DateSelectTS=fDAT.getUTSThisDayLong();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong(KEY_SAVE_INSTANCE_DIALOG_CALENDAR_ACT_DATE_SELECT, DateSelectTS.longValue());
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
elCalendarViewer dlgCalendar = new elCalendarViewer(getSupportActivity(), DateSelectTS.longValue(), (int) Account.getUserFirstDayOfWeek(), this);
return dlgCalendar.getDialog();
}
/**
* Реализация интерфейса elCalendarViewer.OnResultListener
*/
@Override
public void onChangeDate(long _ts, String _date) {
if(OnChangeDateUTSListener.class.isInstance(getSupportActivity())){
try{
((OnChangeDateUTSListener) getSupportActivity()).onChangeDateUTS(_ts);
}finally{
// ничего не делаем
}
}
}
/**
* Интерфейс для обратного вызова.
*/
public interface OnChangeDateUTSListener {
public void onChangeDateUTS(long _ts);
}
}
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
наименование класса sUserAccount с маленькой буквы, переменной DateSelectTS с большой... с меня за такое пол з/п сдёрли бы.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Знаю, по поводу класса, это маленькое введение для себя:rezak90 писал(а):наименование класса sUserAccount с маленькой буквы, переменной DateSelectTS с большой... с меня за такое пол з/п сдёрли бы.
s (маленькая) - обозначает, что класс отвечает за работу с настройками или их хранит.
f (маленькая) - обозначает, что класс содержит в себе функции для разных преобразований данных или их получения в нужном виде.
А в переменной обычно ставлю вначале буковку m, тут просто про неё забыл, код трансформировался быстро и главное было найти оптимальный вариант работы.
П.С. Но вообще, когда программа пишется для себя, каждый сам выбирает удобное обозначение переменных и классов.
П.П.С. дело не в написании, а в документированности написанного.
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
На доже привыкать писать правильно, другим же будет приятно и наглядно. А вдруг завтра какой то Google захочет купить твой проект, покажешь код и будет стыдно.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Мне не стыдно, мне главное чтоб было удобно.
Основная часть кода пишется правильно (как ты выражаешься), а допущения с названиями классов сделаны осознанно и специально.
Основная часть кода пишется правильно (как ты выражаешься), а допущения с названиями классов сделаны осознанно и специально.
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
ладно заканчиваю троллить, код не смотрел просто те две строчки кинулись в глаза.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
DialogFragment работает только с API > 10? Можно ли как-то заставить его работать с API > 7?
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Android Support Libraryigrok-vip писал(а):DialogFragment работает только с API > 10? Можно ли как-то заставить его работать с API > 7?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Опять нужна ваша помощь. Делаю всё по уроку. Но почему-то ошибка в вызове 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
[syntax=java]package com.example.test11;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.DialogFragment;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener{
DialogFragment dlg1;
Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dlg1 = new dialog1();
btn1 =(Button)findViewById(R.id.btnDlg1);
btn1.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnDlg1:
dlg1.show(getFragmentManager(), "dlg1");
break;
default:
break;
}
}
}[/syntax]
Вод диалога
[syntax=java]package com.example.test11;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class dialog1 extends DialogFragment implements OnClickListener {
final String LOG_TAG = "myLogs";
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().setTitle("Title!");
View v = inflater.inflate(R.layout.dialog1, null);
v.findViewById(R.id.btnYes).setOnClickListener(this);
v.findViewById(R.id.btnNo).setOnClickListener(this);
v.findViewById(R.id.btnMaybe).setOnClickListener(this);
return v;
}
public void onClick(View v) {
Log.d(LOG_TAG, "Dialog 1: " + ((Button) v).getText());
dismiss();
}
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
Log.d(LOG_TAG, "Dialog 1: onDismiss");
}
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
Log.d(LOG_TAG, "Dialog 1: onCancel");
}
}[/syntax]
Вот код MainActivity
[syntax=java]package com.example.test11;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.DialogFragment;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener{
DialogFragment dlg1;
Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dlg1 = new dialog1();
btn1 =(Button)findViewById(R.id.btnDlg1);
btn1.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnDlg1:
dlg1.show(getFragmentManager(), "dlg1");
break;
default:
break;
}
}
}[/syntax]
Вод диалога
[syntax=java]package com.example.test11;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class dialog1 extends DialogFragment implements OnClickListener {
final String LOG_TAG = "myLogs";
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().setTitle("Title!");
View v = inflater.inflate(R.layout.dialog1, null);
v.findViewById(R.id.btnYes).setOnClickListener(this);
v.findViewById(R.id.btnNo).setOnClickListener(this);
v.findViewById(R.id.btnMaybe).setOnClickListener(this);
return v;
}
public void onClick(View v) {
Log.d(LOG_TAG, "Dialog 1: " + ((Button) v).getText());
dismiss();
}
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
Log.d(LOG_TAG, "Dialog 1: onDismiss");
}
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
Log.d(LOG_TAG, "Dialog 1: onCancel");
}
}[/syntax]
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Убираю import android.support.v4.app.DialogFragment; ставлю import android.app.DialogFragment; - всё работает.
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
У вас смешались основные и support классы. Посмотрите Урок 114. Там есть пример как работать с фрагментами с использованием Support Library. Там другой наследуемый класс для Activity, другой класс FragmentManager, другой метод для получения FragmentManager.igrok-vip писал(а): Убираю import android.support.v4.app.DialogFragment; ставлю import android.app.DialogFragment; - всё работает.
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Здравствуйте,
Такая задача. Есть ListView с картинкой и текстом. Нужно сделать так, чтобы при OnItemClick картинка открывалась поверх основного Активити. Я так подозреваю, что это нужно делать через DialogFragment, но не могу придумать, как передать в DialogFragment картинку.
Спасибо!
Такая задача. Есть ListView с картинкой и текстом. Нужно сделать так, чтобы при OnItemClick картинка открывалась поверх основного Активити. Я так подозреваю, что это нужно делать через DialogFragment, но не могу придумать, как передать в DialogFragment картинку.
Спасибо!
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
передавать нужно путь к картинке, или же bitmap в bundle пихать, но лучше всё таки путьasolovey писал(а):Здравствуйте,
Такая задача. Есть ListView с картинкой и текстом. Нужно сделать так, чтобы при OnItemClick картинка открывалась поверх основного Активити. Я так подозреваю, что это нужно делать через DialogFragment, но не могу придумать, как передать в DialogFragment картинку.
Спасибо!
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
rezak90,
А Вы могли бы написать конкретнее, как это сделать(я новичок в Андроид). Вот сниппеты кода из DialogFragment и OnItemClick
Спасибо!
А Вы могли бы написать конкретнее, как это сделать(я новичок в Андроид). Вот сниппеты кода из DialogFragment и OnItemClick
Код: Выделить всё
public class ImageFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
// Inflating layout for the dialog
View v = inflater.inflate(R.layout.single_image, null);
ImageView fclogo = (ImageView) v.findViewById(R.id.singleimage);
Bundle b = getArguments();
return v;
}
}
Код: Выделить всё
public void onItemClick(AdapterView<?> item, View v,
int position, long id) {
//Drawable d = getResources().getDrawable(position);
// Instantiating TimeDailogFragment, which is a DialogFragment object
ImageFragment imFragment = new ImageFragment();
// Creating a bundle object to store the position of the selected country
Bundle b = new Bundle();
// Storing the position in the bundle object
b.putInt("position", position);
// Setting the bundle object as an argument to the DialogFragment object
imFragment.setArguments(b);
// Getting FragmentManager object
FragmentManager fragmentManager = getFragmentManager();
// Starting a FragmentTransaction
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// Getting the previously created fragment object from the fragment manager
ImageFragment imPrev = (ImageFragment)fragmentManager.findFragmentByTag("time_dialog");
// If the previously created fragment object stillexists, then that has to be removed
if(imPrev!=null)
fragmentTransaction.remove(imPrev);
// Opening the fragment object
imFragment.show(fragmentTransaction, "time_dialog");
}
};
Re: Урок 110. Android 3. Fragments. DialogFragment - диалог
Может и я когда-нибудь дочитаю до этого урока