2014-09-02 3 views
4

У меня есть приложение для Android, которое имеет несколько вкладок. Для создания вкладок я использовал следующий учебник:Вызов метода фрагмента из вкладок Android android.

http://www.androidhive.info/2013/10/android-tab-layout-with-swipeable-views-1/

Так язычки реализованы с использованием фрагментов, которые обрабатываются TabsPagerAdapter, который проходит FragmentPagerAdapter.

Однако у меня возникли проблемы с вызовом метода в одном из фрагментов из моего основного действия.

Я хочу вызвать этот метод, когда мое основное действие получает сообщение. В частности, мне нужно обновить интерфейс фрагмента, когда это сообщение получено. Но я не уверен, как правильно идентифицировать фрагмент, поскольку он не был объявлен в xml и поэтому не имеет тега/id.

Я надеялся, что кто-то сможет помочь мне найти лучший способ сделать это.

+0

возможно дублировать [метод вызова между фрагментами, находящимися в вкладках] (http://stackoverflow.com/questions/14202662/calling-method-inbetween-fragments-which-are-in-tabs) –

+0

сколько у вас фрагментов? – mmlooloo

+0

Благодарим за указание этого. Однако этот вопрос немного отличается. В нем описывается, как вызвать метод из фрагмента внутри другого фрагмента. Я надеялся выяснить, как вызвать метод из фрагмента в родительской активности. Это происходит потому, что сообщения принимаются в моей деятельности, а не в фрагменте. Альтернативно, если бы был способ изменить UI фрагмента из родительской активности, это также сработало бы для меня. – edbert

ответ

1

сначала создать все ваши фрагмента в onCreate методом Activity и добавить их в mMyFrag

ArrayList<MyFragment> mMyFrag = new ArrayList<MyFragment>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    for(int i=0; i<4; i++) { 
     MyFragment fragment = MyFragment.newInstance(arg); 
     mMyFrag.add(fragment); 
    } 
} 

и изменить свой адаптер:

private class MyPagerAdapter extends FragmentPagerAdapter { 

private ArrayList<MyFragment> mMyFragList; 

public MyPagerAdapter(FragmentManager fm, ArrayList<MyFragment> list) { 
    super(fm); 
    mMyFragList = list; 
} 

@Override 
public int getCount() { 
    return mMyFragList.size(); 
} 

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

@Override 
public MyFragment getItem(int position) { 
    return mMyFragList.get(position); 
} 

} 

так, когда вы хотите вызвать метод из деятельности для фрагментации говорят 1:

mMyFrag.get(1).yourMethod(); 
Смежные вопросы