ViewPager. Данные из Activity в фрагмент

Интерфейс, диалоги, темы, стили, меню
Ответить
lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

ViewPager. Данные из Activity в фрагмент

Сообщение lamberto » 11 апр 2015, 16:58

Всем привет, нужна помощь.

Дело в том что имеется Класс, наследуемый от BroadcastReciver, который обрабатывает исключение и записывает в бд входящие сообщения, но есть сообщение определённого содержания которые обрабатываются и должны отсылаться в определённый фрагмент, если правильно понимаю то вариант передачи один через intent в mainActivity а из него в bundle.. и через FragmentTransaction уже в Fragment. Тут и возникает проблема т.к. экземпляры фрагменты для отображение возвращаются через FragmentPagerAdapter. Для каждого фрагмента свой класс и layout.
вот моя попытка реализации:

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

 
private ViewPager mViewPager; 
class SampleFragmentPagerAdapter extends FragmentPagerAdapter { 
 
        SampleFragmentPagerAdapter(FragmentManager fm) { 
            super(fm); 
        } 
 
               /** 
         * Return the {@link android.support.v4.app.Fragment} to be displayed at {@code position}. 
         * <p> 
         * Here we return the value returned from {@link SamplePagerItem#//createFragment()}. 
         */ 
 
        @Override 
        public Fragment getItem(int position) { 
           mTabsPosition = position; 
            if (position == 1) { 
                if (position == 1) { 
 
                    String name = makeFragmentName(mViewPager.getId(), position); 
                    getChildFragmentManager().findFragmentByTag(name); 
                    Log.d(LOG_TAG, "Содержимое " + name); 
                } 
                return frag2.newInstance(position); 
            } 
            else if (position == 2){ 
                 if (position == 2) { 
                    String name = makeFragmentName(mViewPager.getId(), mTabsPosition); 
                     getChildFragmentManager().findFragmentByTag(name); 
                     Log.d(LOG_TAG, "Содержимое " + name); 
                } 
                return frag3.newInstance(position); 
            } 
               else if (position == 3){ 
                if (position == 3) { 
                    String name = makeFragmentName(mViewPager.getId(), mTabsPosition); 
                    getChildFragmentManager().findFragmentByTag(name); 
                    Log.d(LOG_TAG, "Содержимое " + name); 
                } 
                return frag4.newInstance(position); 
            } 
             else 
            { 
                if (position == 0) { 
                    String name = makeFragmentName(mViewPager.getId(), mTabsPosition); 
                     getChildFragmentManager().findFragmentByTag(name); 
                    Log.d(LOG_TAG, "Содержимое " + name); 
                } 
                return frag1.newInstance(position);} 
 
 
           
        } 
private String makeFragmentName(int viewId, int index) { 
            return "android:switcher:" + viewId + ":" + index; 
        } 
} 
Содержимое name по логу для фрагмента 1 такое "android:switcher:2131296289:0"

Вот собственно как я пытаюсь всеё это чудо запихать в bundle в классе MainActivity:

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

  @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);//activity_main 
 
        if( getIntent() != null ) { 
            if( getIntent().getExtras() != null ) { 
                stat  =  getIntent().getExtras().getString(key); 
                Log.d(LOG_TAG, "Содержимое " + stat + "Во main instant"); 
            } 
        } 
     
        if (savedInstanceState == null) { 
 
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
            SlidingTabsColorsFragment fragment = new SlidingTabsColorsFragment(); 
 
            transaction.replace(R.id.sample_content_fragment, fragment); 
 
            transaction.commit(); 
        } 
    
if (savedInstanceState != null) { 
    Log.d(LOG_TAG, "Создал"); 
    Bundle bundle1 = new Bundle(); 
    bundle1.putString("tag", stat); 
 
    Fragment4 yfc = (Fragment4) getSupportFragmentManager().findFragmentByTag(TAGfarg4); 
    yfc.setArguments(bundle1); 
    Log.d(LOG_TAG, "Содержимое " + bundle1 + "Во main"); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction().replace(R.id.sample_content_fragment, yfc, TAGfarg4); 
    ft.commit(); 
 
} 
 
 
    } 

Содержимое TAGfrag4 взят из лога тот что показывает name в классе FragmentPagerAdapter
String TAGfrag4 = "android:switcher:2131296289:4"

Ну а далее понятно ловлю bundle в Fragment4...

Ну к сожалению содержимое все время null.

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Данные из Activity в фрагмент

Сообщение lamberto » 13 апр 2015, 08:54

Тема закрыта, вредно думать слишком сложно!

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

Re: ViewPager. Данные из Activity в фрагмент

Сообщение Foenix » 13 апр 2015, 10:23

Ну а далее понятно ловлю bundle в Fragment4...
'это был код фрагмента???
ну тогда понятно, так не делают
R.id.team

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

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Данные из Activity в фрагмент

Сообщение lamberto » 13 апр 2015, 11:57

Нет код фрагмента я не предоставлял т.к. проблем в нем я не испытывал) а с bundle все понятно как принисать да и как отслылать, просто экземпляр фрагмента возвращающийся через адаптер непонятно как заменить), решение было простое определить public метод в классе фрагмента4 и аызывать его из класса который наследован от broadcastreciver

Ответить