Урок 106. Android 3. Fragments. Взаимодействие с Activity
Урок 106. Android 3. Fragments. Взаимодействие с Activity
В этом уроке:
- рассмотрим взаимодействие между Activity и ее фрагментами
Click here to read this article!
- рассмотрим взаимодействие между Activity и ее фрагментами
Click here to read this article!
Последний раз редактировалось damager82 23 май 2017, 22:09, всего редактировалось 11 раз.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
хочу заполнить Gridview во Fragment из базы sqlite. Мне надо создавать отдельное подключение в БД (как это скажется на производительности и не будет ли каких-либо конфликтов)?
Например:
DB db = new DB(getActivity());
db.open();
или создать тока в Activity (onCreate). И каким образом тогда получить(передать) доступ к соединению с бд из Activity во fragment.
Желательно, чтобы fragment был максимально независим от Activity.
Например:
DB db = new DB(getActivity());
db.open();
или создать тока в Activity (onCreate). И каким образом тогда получить(передать) доступ к соединению с бд из Activity во fragment.
Желательно, чтобы fragment был максимально независим от Activity.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Уже устала думать, поэтому хочу попросить помощи.
У меня активити, назовем MainActivity. Вызывает диалог (будь он неладен) назову FragmentDialog1, на нем дата. Я хочу приделать дату-пикер к нему. Приделала, Все окей, но не могу данные вернуть, как я обычно это делаю в обычном случае:
ошибка датакаст, что естественно, идет на строчке с getActivity(). Понятное дело, у меня обработчик сидит в FragmentActivity, а тут получается что если я вызываю getActivity(), то оно возвращает мне MainActivity, из которой я вызывала первый FragmentDialog1.
Можно как-то быстренько к нему обратиться, или надо затевать передачу даты в MainActivity, потом передавать это дело в FragmentDialog1..?
У меня активити, назовем MainActivity. Вызывает диалог (будь он неладен) назову FragmentDialog1, на нем дата. Я хочу приделать дату-пикер к нему. Приделала, Все окей, но не могу данные вернуть, как я обычно это делаю в обычном случае:
Код: Выделить всё
public void onDateSet(DatePicker view, int year, int month, int day) {
EditDateDialogListener activity = (EditDateDialogListener) getActivity();
activity.onFinishDateDialog(day, month, year);
}
Можно как-то быстренько к нему обратиться, или надо затевать передачу даты в MainActivity, потом передавать это дело в FragmentDialog1..?
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: Урок 106. Android 3. Fragments. Взаимодействие с Activit
люди.. ну подскажите..
как обратиться из датапикера (который dialogFragment), вызываемого из DialogFragment1? Мне сказали, что как-то можно назначить DialogFragment1-у ID, а потом по нему достать
Я пишу в коде DialogFragment1:
А затем пытаюсь из датапикера вызывать
Пробовала и так
и так
все равно null туда попадает. Я просто плохо разбираюсь что именно тут надо вызывать..
Нашла! нашла по тегу!!
может кому-то надо будет, пишу тут
ПРи вызове диалога
а затем, чтобы найти его
как обратиться из датапикера (который dialogFragment), вызываемого из DialogFragment1? Мне сказали, что как-то можно назначить DialogFragment1-у ID, а потом по нему достать
Я пишу в коде DialogFragment1:
Код: Выделить всё
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.dordernewfragment, container, false);
v.setId(222);
...
}
Код: Выделить всё
public void onDateSet(DatePicker view, int year, int month, int day) {
EditDateDialogListener handler = (EditDateDialogListener) getActivity().getSupportFragmentManager().findFragmentById(222);
handler.onFinishDateDialog(day, month, year);
}
Код: Выделить всё
EditDateDialogListener handler = (EditDateDialogListener) getActivity().getFragmentManager().findFragmentById(222);
Код: Выделить всё
EditDateDialogListener handler = (EditDateDialogListener) getFragmentManager().findFragmentById(222);
Нашла! нашла по тегу!!
может кому-то надо будет, пишу тут
ПРи вызове диалога
Код: Выделить всё
DialogFragment dlg = DOrderCaptionFragment.newInstance(p1,p11, p2, p3);
dlg.show(getSupportFragmentManager(), "NewFragmentDate");
Код: Выделить всё
EditDateDialogListener activity = (EditDateDialogListener) getActivity().getSupportFragmentManager().findFragmentByTag("NewFragmentDate");
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: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Кто-нибудь знает, как получить из активити доступ к переменной класса статического фрагмента? В уроке только к вьюшке доступ
Fragment frag1 = getFragmentManager().findFragmentById(R.id.fragment1);
((TextView) frag1.getView().findViewById(R.id.textView))
.setText("Access to Fragment 1 from Activity");
А мне нужно получить переменную моего класса, которая extends Fragment
Fragment frag1 = getFragmentManager().findFragmentById(R.id.fragment1);
((TextView) frag1.getView().findViewById(R.id.textView))
.setText("Access to Fragment 1 from Activity");
А мне нужно получить переменную моего класса, которая extends Fragment
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: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Создал переменную в классе, который extends Fragment. Присвоил в конструкторе значение. В активити просто обратился к экземпляру класса и получил нужное значение:Olivka писал(а):Кто-нибудь знает, как получить из активити доступ к переменной класса статического фрагмента? В уроке только к вьюшке доступ
Fragment frag1 = getFragmentManager().findFragmentById(R.id.fragment1);
((TextView) frag1.getView().findViewById(R.id.textView))
.setText("Access to Fragment 1 from Activity");
А мне нужно получить переменную моего класса, которая extends Fragment
Toast.makeText(this, String.valueOf(frag1.some_Var), Toast.LENGTH_SHORT).show();
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
В уроке такой текст:
"На всякий случай проговорю одну вещь из разряда «Спасибо кэп!». Если посмотреть на код MainActivity, то можно заметить, что frag2 в методе onCreate и frag2 в методе onClick по сути работают с одним объектом – Fragment2. Это так и есть. Оба frag2 в итоге будут ссылаться на один объект. Так что, если вы динамически добавили фрагмент, то у вас уже есть ссылка на него, и искать его через findViewById вам уже не надо."
Судя по всему, речь здесь идёт о методе findFragmentById, а не о findViewById..
"На всякий случай проговорю одну вещь из разряда «Спасибо кэп!». Если посмотреть на код MainActivity, то можно заметить, что frag2 в методе onCreate и frag2 в методе onClick по сути работают с одним объектом – Fragment2. Это так и есть. Оба frag2 в итоге будут ссылаться на один объект. Так что, если вы динамически добавили фрагмент, то у вас уже есть ссылка на него, и искать его через findViewById вам уже не надо."
Судя по всему, речь здесь идёт о методе findFragmentById, а не о findViewById..
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Верно, спасибо!River писал(а):В уроке такой текст:
"На всякий случай проговорю одну вещь из разряда «Спасибо кэп!». Если посмотреть на код MainActivity, то можно заметить, что frag2 в методе onCreate и frag2 в методе onClick по сути работают с одним объектом – Fragment2. Это так и есть. Оба frag2 в итоге будут ссылаться на один объект. Так что, если вы динамически добавили фрагмент, то у вас уже есть ссылка на него, и искать его через findViewById вам уже не надо."
Судя по всему, речь здесь идёт о методе findFragmentById, а не о findViewById..
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Здравствуйте подскажите кто знает очень надо !!! Задача заключается в следующем нужно передать данные из FragmentActivity в созданный в нём Fragment. Фрагменты создаются с помощью FragmentPagerAdapter.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Можно Arguments использовать. Посмотрите Урок 115, там они есть в примереmr.Lazy писал(а):Здравствуйте подскажите кто знает очень надо !!! Задача заключается в следующем нужно передать данные из FragmentActivity в созданный в нём Fragment. Фрагменты создаются с помощью FragmentPagerAdapter.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Как принимать данные в Fragment я понял:damager82 писал(а):Можно Arguments использовать. Посмотрите Урок 115, там они есть в примереmr.Lazy писал(а):Здравствуйте подскажите кто знает очень надо !!! Задача заключается в следующем нужно передать данные из FragmentActivity в созданный в нём Fragment. Фрагменты создаются с помощью FragmentPagerAdapter.
Код: Выделить всё
static FragmentView1 newInstance(String pos) {
FragmentView1 details = new FragmentView1();
Bundle args = new Bundle();
args.putString("title", pos);
details.setArguments(args);
return details;
}
String getPosition() {
return getArguments().getString("position");
}
Код: Выделить всё
package com.example.vksktv;
public class abonentsInfo extends FragmentActivity {
public static final String TAG_LOG = "MyLog";
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
private CharSequence subtitle = "Поиск модема";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
ActionBar barOne = getActionBar();
barOne.setSubtitle(subtitle );
//--------------Эти данные нужно передать в созданные Fragment ------
Intent intent = getIntent();
String title = intent.getStringExtra("title");
//-------------------------------------------
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private final String titles[] = new String[]{"История изменения статуса","Баланс абонента","Патежи абонента"};
private final Fragment frags[] = new Fragment[titles.length];
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
frags[0]= new FragmentView1();
frags[1]= new FragmentView2();
frags[2]= new FragmentView3();
}
@Override
public Fragment getItem(int position) {
return frags[position];
}
@Override
public int getCount() {
return frags.length;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
return titles[position];
}
}
}
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
После создания фрагмента используйте метод setArgumentsmr.Lazy писал(а):А как их туда передать так и не могу понять....
-
- Сообщения: 4
- Зарегистрирован: 25 ноя 2013, 13:52
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Здравствуйте! Помогите плиз, в основном activity есть checkbox как мне проверить isChecked из фрагмента?
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Думаю стоит сохранять значения чекбоксов в Preferences - в этом случае можно из достать из любого места
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Решений масса. Я бы создал специальный интерфейс, через который фрагмент смог бы общаться с Activity.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 4
- Зарегистрирован: 25 ноя 2013, 13:52
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
А можно немного поподробнее, как реализовать, хотя бы через что и в какую сторону покопать?KamiSempai писал(а):Решений масса. Я бы создал специальный интерфейс, через который фрагмент смог бы общаться с Activity.
Через Preferences можно попробовать, но хотелось бы что бы checkbox был на глазах.andrews писал(а):Думаю стоит сохранять значения чекбоксов в Preferences - в этом случае можно из достать из любого места
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
[syntax=java]public interface MyInterface {madcrinkle писал(а):А можно немного поподробнее, как реализовать, хотя бы через что и в какую сторону покопать?KamiSempai писал(а):Решений масса. Я бы создал специальный интерфейс, через который фрагмент смог бы общаться с Activity.
public boolean optionChecked();
}[/syntax]
После чего Activity должно реализовать этот интерфейс.
Далее, нужно передать его во фрагмент. Например так:[syntax=java]public class MyFragment extends Fragment {
public MyInterface mMyInterface;
public void setMyInterface (MyInterface myInterface) {
mMyInterface = myInterface;
}
}[/syntax]Теперь можно общаться с активностью через этот интерфейс.
А можно сделать еще хитрее[syntax=java]public class MyFragment extends Fragment {
public MyInterface mMyInterface;
public void onAttach (Activity activity){
if(activity instanceof MyInterface)
mMyInterface = activity;
}[/syntax]
Но это в том случае если фрагмент используется в нескольких активностях, иначе можно просто получить активность и обращаться к ее публичным методам:[syntax=java]((MyActivity) getActivity()).myMetod()[/syntax]Тогда, вышеописанные пляски с интерфейсом не нужны.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 4
- Зарегистрирован: 25 ноя 2013, 13:52
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
KamiSempai, спасибо, буду пробовать.
-
- Сообщения: 4
- Зарегистрирован: 25 ноя 2013, 13:52
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Сделал интерфейс, но что то не могу понять как мне теперь достучатся до моего checkbox'aKamiSempai писал(а):Теперь можно общаться с активностью через этот интерфейс.
пробую так:
Код: Выделить всё
pdaStream = (CheckBox) mMyInterface.findViewById(R.id.pdaStream);
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Очевидно, вы не в ладах с ООП. Вы вообще поняли, что было в этом уроке и как оно работает?
Видимо я совершенно вас запутал своими примерами. Забудьте все, что я писал про интерфейс.
Делайте так:
[syntax=java]pdaStream = (CheckBox) getActivity().findViewById(R.id.pdaStream); [/syntax]
Видимо я совершенно вас запутал своими примерами. Забудьте все, что я писал про интерфейс.
Делайте так:
[syntax=java]pdaStream = (CheckBox) getActivity().findViewById(R.id.pdaStream); [/syntax]
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.