Урок 108. Android 3. ActionBar. Навигация - табы и выпадающий список

Обсуждение уроков
Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Діма » 19 фев 2013, 14:16

Як я зрозумів tab content може бути тільки Fragment?

До мене щось не доходить) як правильно зробити таке:

tab1 -> fragment1->fragment2->fragment3
tab2 -> fragment4->fragment5->fragment6
tab3 -> fragment7->fragment8->fragment9

як в одному tab зробити переходи між декількома вікнами? Це все має виконувати Activity, з фрагмента тільки повертати повідомлення до Activity?
Чи можна із Fragment запустити інший Fragment, якщо так то як?)

буду радий допомоги...


Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Діма » 19 фев 2013, 15:07

Озорная Свинья писал(а):Монгол штоле?
Почему?
:D хохол) Могу и на руском писать... только с ошыбками... если устраивает, буду писать на руском)

Озорная Свинья
Сообщения: 59
Зарегистрирован: 02 фев 2013, 00:03

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Озорная Свинья » 19 фев 2013, 15:34

Переведи вопрос на руске изык?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение rezak90 » 19 фев 2013, 17:26

як в одному tab зробити переходи між декількома вікнами? Це все має виконувати Activity, з фрагмента тільки повертати повідомлення до Activity?
Чи можна із Fragment запустити інший Fragment, якщо так то як?)
Вы так и не просмотрели наверное примеры по фрагментам как я и рекомендовал. Переходы делаются replace методом от FragmentManager'a он заменяет текущий фрагмент на необходимый.
R.id.team
Политика на форуме запрещена

Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Діма » 19 фев 2013, 18:11

Вы так и не просмотрели наверное примеры по фрагментам как я и рекомендовал. Переходы делаются replace методом от FragmentManager'a он заменяет текущий фрагмент на необходимый.
Я ознаемился на уроке 105 наведен пример, я создал простое приложение использовал TabHost для примера урок 76, создал 3 таба, content вставил 3 разних Fragment, потом из фрагмента при какомнто event:
Fragment newFragment = new NewFragment();
ft = getFragmentManager().beginTransaction();
ft.replace(R.id.tabcontent, newFragment);
ft.commit();

в меня в трех табах заменилось вместимое... :D

использовал етот пример:
https://github.com/JakeWharton/ActionBa ... tTabs.java

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение rezak90 » 19 фев 2013, 19:12

Значит Вы что то не так делаете, по этому примеру многие приложения написаны и прекрасно работают, так что смотрите внимательней. Показывайте код.
R.id.team
Политика на форуме запрещена

Аватара пользователя
dens
Сообщения: 47
Зарегистрирован: 03 фев 2013, 00:14

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение dens » 21 фев 2013, 14:54

Кстати, если генерить в одном из фрагментов список через курсор адаптер, то при переключении между вкладками (конкретнее, если такой список в третьей вкладке, мы её открыли, у нас забился список, потом мы открыли вторую, а потом снова третью и листаем список) возникает ошибка, ибо фрагмент мэнеджер (или кто-то там) пытался запомнить текущее состояние списка (то, что было отображено в окошке), и, когда мы вернулись со второй вкладки, он восстановил картину, но всё, что не поместилось на экран уже удалилось из памяти и фрагмент это заново не стал подсасывать. Пишет, что курсоров уже нет (есть только те, что были видны при переключении вкладок).

Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Діма » 19 мар 2013, 17:51

rezak90 писал(а):Значит Вы что то не так делаете, по этому примеру многие приложения написаны и прекрасно работают, так что смотрите внимательней. Показывайте код.
Разобрался нимного из фрагментами)
Появился новый вопрос, наведу код:

public class MainActivity extends SherlockFragmentActivity {
public static String tab1 = "tab1", tab2 = "tab2", tab3 = "tab3";

@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(com.actionbarsherlock.R.style.Theme_Sherlock);
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_navigation);

ActionBar bar = getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

bar.addTab(bar.newTab().setText("Tab 1").setTabListener(new TabListener<Fragment1>(this, tab1, Fragment1.class, null)));
bar.addTab(bar.newTab().setText("Tab 2").setTabListener(new TabListener<Fragment2>(this, tab2, Fragment2.class, null)));
bar.addTab(bar.newTab().setText("Tab 3").setTabListener(new TabListener<Fragment3>(this, tab3, Fragment3.class, null)));
}

public class TabListener<T extends Fragment> implements ActionBar.TabListener {
private final FragmentActivity mActivity;
private final String mTag;
private final Class<T> mClass;
private final Bundle mArgs;
private Fragment mFragment;

public TabListener(FragmentActivity activity, String tag, Class<T> clz, Bundle args) {
mActivity = activity;
mTag = tag;
mClass = clz;
mArgs = args;
FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();

// Check to see if we already have a fragment for this tab, probably
// from a previously saved state. If so, deactivate it, because our
// initial state is that a tab isn't shown.
mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
if (mFragment != null && !mFragment.isDetached()) {
ft.detach(mFragment);
}
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft = mActivity.getSupportFragmentManager().beginTransaction();

if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
ft.commit();
} else {
ft.attach(mFragment);
ft.commit();
}
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft = mActivity.getSupportFragmentManager().beginTransaction();

if (mFragment != null) {
ft.detach(mFragment);
ft.commitAllowingStateLoss();
}
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {

}
}
}

TabListener взял сдесь http://stackoverflow.com/questions/7992 ... tton-press

В Fragment1 layout-e создал кнопку:

Button but = (Button)layout.findViewById(R.id.but);
but.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
Fragment fragment4 = new Fragment4();
ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.content, fragment4);
ft.addToBackStack(null);
ft.commit();
}
});


Запустил, в Tab 1 перешол на fragment4, переключил на Tab 2 или на Tab 3 нажал кнопку back и в меня исчезло отображение компонентов в Tab 1

тоесть я был на Tab 2 а изменилось в Tab 1, как это можно исправить? Так сказать чтоб каждый из Tab имел свой transaction.
Ще таке уточнення android:minSdkVersion="8".
Если что не так подскажыте что делать, спасибо!

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение rezak90 » 19 мар 2013, 18:28

потому что вы в стек добавляете add fragment а нужно реплейсить replace
R.id.team
Политика на форуме запрещена

Діма
Сообщения: 11
Зарегистрирован: 13 июл 2012, 13:23

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Діма » 20 мар 2013, 17:15

rezak90 писал(а):потому что вы в стек добавляете add fragment а нужно реплейсить replace
Спасибо за подсказку, replace мне не подходить нужно всетаки add, проблема была ft = getFragmentManager().beginTransaction();
Нужно было вызвать getSupportFragmentManager зделал так

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
parent = (FragmentActivity) activity;
}

ft = parent.getSupportFragmentManager().beginTransaction();

но осталась ище вопрос) наведу пример в свовах что делаю
Запускаю приложение, нахожусь в tab1 нажымаю кнопку и перехожу на Fragment4, потом нажымаю на кнопку back срабатывает ft.addToBackStack(null); и я возвращаюсь на Fragment1, все нормально,
если перейти на Fragment4, потом зделать переход между вкладками и возвратиться обратно на tab1 в нас отображается Fragment4 все нормально, если нажать back вылитает приложение из ошыбкой
03-20 14:00:15.601: E/AndroidRuntime(1372): FATAL EXCEPTION: main
03-20 14:00:15.601: E/AndroidRuntime(1372): java.lang.IllegalStateException: Fragment already added: Fragment1{44f43090 #0 id=0x1020002 tab1}

Если есть возможность подскажыте что я не хорошо зделал) Спасибо!


Я питаюсь зделать такую задачу, есть несколько tab в каждом из них может быть несколько fragment, каждый из tab должен сохранять историю переходов.
Буду рад помощи...

Ище такой вопрос:

bar.addTab(bar.newTab().setText("Tab 1").setTabListener(new TabListener<Fragment1>(this, tab1, Fragment1.class, null)));
bar.addTab(bar.newTab().setText("Tab 2").setTabListener(new TabListener<Fragment2>(this, tab2, Fragment2.class, null)));
bar.addTab(bar.newTab().setText("Tab 3").setTabListener(new TabListener<Fragment3>(this, tab3, Fragment3.class, null)));

Здесь заместь this, можно поставить 3 разных Activity?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Foenix » 16 апр 2013, 00:40

Как считаете, почему - я ставлю как положено для 5 кнопок бара ifRoom , но даже в ландшафтном режиме, когда полно места - у меня на Action Bar всего 4 кнопки показывается (столько же , сколько и в портретном режиме).
И еще - можно ли в меню, выпадающем из ActionBar (три точки в верхнем правом углу) сделать разделитель? Пользователи пока мало натренированы, пункты меню слишком близко расплолжены..
R.id.team

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение rezak90 » 16 апр 2013, 06:10

Olivka писал(а):Как считаете, почему - я ставлю как положено для 5 кнопок бара ifRoom , но даже в ландшафтном режиме, когда полно места - у меня на Action Bar всего 4 кнопки показывается (столько же , сколько и в портретном режиме).
И еще - можно ли в меню, выпадающем из ActionBar (три точки в верхнем правом углу) сделать разделитель? Пользователи пока мало натренированы, пункты меню слишком близко расплолжены..
делайте android:showAsAction="always" и кнопки будут всегда показываться, на счёт разделителя не уверен, я только менял цвет меню но думаю и разделить можно
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Foenix » 16 апр 2013, 13:19

Представляешь, поменяла - стала показываться кнопка, я еще в файле меню переставила парочку пунктов - меню взбесилось, кнопки стали делать совсем не те функции, что нужно. Пока поняла, что нужно было сделать проджекту Clean..........
Теперь вернула везде ifRoom - и стало показываться все нормально даже в портретном режиме
R.id.team

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

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Foenix » 16 апр 2013, 15:58

Теперь хочу disable сделать кнопке на actionbar (меню), вернее сделала, но хочу и картинку подставить светленькую. Не могу понять как. Через xml можно или нельзя?
R.id.team

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение rezak90 » 16 апр 2013, 21:23

Olivka писал(а):Теперь хочу disable сделать кнопке на actionbar (меню), вернее сделала, но хочу и картинку подставить светленькую. Не могу понять как. Через xml можно или нельзя?
selector вместо простой иконки
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Foenix » 17 апр 2013, 15:08

Все решилось проще. Может кому-то пригодится.

Код: Выделить всё

 item_filter = menu.findItem(R.id.item_filter);     
	    item_filter.setIcon(R.drawable.filter1);
Меняешь в коде и дело с концом.
R.id.team

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

bars222
Сообщения: 3
Зарегистрирован: 05 июн 2013, 15:25

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение bars222 » 19 июн 2013, 15:42

доброе времени суток. Я хотел поставить Таби в свой activity и сделал это c ActionBar но таби в LanscapeMode поднимались в первую строку, что я должен делать чтобы таби осталис во втором строке. Или есть другие способы?

Изображение

Изображение

Virtovskiy
Сообщения: 1
Зарегистрирован: 21 июн 2013, 21:20

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение Virtovskiy » 29 июн 2013, 23:11

Привет всем!

Скажите а как сделать чтобы табы были в виде RadioGroup / RadioButton? Где это настраивать и как?

Аватара пользователя
shtil
Сообщения: 27
Зарегистрирован: 04 июл 2013, 10:01

Re: Урок 108. Android 3. ActionBar. Навигация - табы и выпад

Сообщение shtil » 21 июл 2013, 15:54

Здравствуйте!
На сколько я понял, то выпадающий список в Action Bar'е может находиться только на одном активити и работать приходится с фрагментами. Меня интересует такой вопрос: можно ли как то реализовать этот список, чтобы он был на всех активити, и с его помощью можно было переходить между этими активити?
Спасибо.

Ответить