2014-01-04 4 views
2

Я хочу знать, как выполнить эти действия в holoeverywhere:Как получить в настоящее время видимый фрагмент из активности при использовании holoeverywhere slider addon?

Получить ссылку на текущий видимый и активный фрагмент от активности при использовании слайдера аддона в сочетании с Tabber.

Получить ссылку на TabsTabsSwipeFragment из активности/других фрагментов и динамически отключить/включить прокрутку.

+0

R elated - http://stackoverflow.com/a/21104084/80428 – Jay

+0

Возможный дубликат [получить в настоящее время фрагмент] (http://stackoverflow.com/questions/9294603/get-currently-displayed-fragment) –

ответ

1

Получить ссылку на текущий видимый и активный фрагмент из деятельности при использовании слайдера аддона в сочетании с Tabber:

вы можете предоставить тег для фрагмента, как это:

sliderMenu.add("tab2", Fragment2.class, SliderMenu.GREEN).setTag("mynavigation-2"); 

Также вы можете получить текущую страницу Numbe г с помощью:

sliderMenu.getCurrentPage(); 

Вы не имеете никакого способа получения текущего фрагмента непосредственно, но вы можете комбинировать эти два способа и найти фрагмент через FragmentManager:

getSupportFragmentManager().findFragmentByTag("mynavigation-" + sliderMenu.getCurrentPage()); 

Получить ссылку на TabsTabsSwipeFragment.java из Activity/other Fragments и динамически отключить/включить прокрутку. В коде:

getSupportFragmentManager().findFragmentByTag("mynavigation-2").getChildFragmentManager().findFragmentById(tagFragmentId); 

В вашей деятельности:

private int tagFragmentId; 
public void setTagFragmentId(int i) { 
    Log.i(TAG, "fetched setTagFragmentId: " + i); 
    tagFragmentId= i; 
} 

на вкладке Фрагмент (который является потомком TabsTabsSwipeFragment):

public void onViewCreated(View view, Bundle savedInstanceState) 
     ((mainActivity) getSupportActivity()).setTagFragmentId(this 
       .getId()); 
    } 

Ссылка: https://github.com/Prototik/HoloEverywhere/wiki/Addon:-Slider

7

Для получения текущего активного и видимого фрагментов, я понимаю, что HoloEverywhere использует библиотеку поддержки Android. Попробуйте что-то похожее на «get currently displayed fragment».

public Fragment getActiveFragment() { 
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) { 
     return null; 
    } 
    String tag = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1).getName(); 
    return getSupportFragmentManager().findFragmentByTag(tag); 
} 

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

Теперь для отключения Swiping, я понятия не имею, что TabsTabsSwipeFragment есть, но вы можете получить ссылку на любой фрагмент, запрашивая их тег от менеджера фрагмента, от того, если вы действительно хотите, обернув через все фрагменты и сравнивая класс (Object.getClass). Отключение ViewPager от того прокатываются может быть достигнуто нечто похожее на «How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?»

package com.yourcompany; 

import android.content.Context; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 

public class SwipeableViewPager extends ViewPager { 

    private boolean swipeable = true; 

    public SwipeableViewPager(Context context) { 
     super(context); 
    } 

    public SwipeableViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void setSwipeable(boolean swipe) { 
     this.swipeable = swipe; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     return (swipeable) super.onInterceptTouchEvent(event) : false; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return (swipeable) super.onTouchEvent(event) : false; 
    } 
} 
+0

getSupportFragmentManager() ,getBackStackEntryCount() всегда возвращает 0 –

+0

Как вы добавляете фрагменты? Вы даете им теги? Попробуйте вызвать 'getSupportFragmentManager(). ExecutePendingTransactions()' после 'commit()'. Трудно помочь без какого-либо исходного кода. – Tom

+0

фрагменты создаются слайдером: sliderMenu = addonSlider(). GetDefaultSliderMenu (R.layout.menu); \t \t sliderMenu.add ("tab1", \t \t \t \t TabsTabsSwipeFragment.class, SliderMenu.BLUE); \t \t sliderMenu.add ("Таб2", Fragment2.class, \t \t \t \t SliderMenu.GREEN); Как я вижу, я не могу отметить фрагмент –