Chamair um método de atividade de um fragment

Tentando chamair um método na minha atividade de um fragment. Eu quero que o fragment forneça os dados do método e obtenha os dados quando o método retornair. Eu quero alcançair semelhante a chamada em um método static, mas sem o uso de estática porque ele cria problemas na atividade.

Novos fragments, então eu preciso de uma explicação fácil e pedagógica!

  • O Android ViewPager muda automaticamente a página
  • Proguaird remoview annotations no aplicativo Android
  • Número de colunas do gerenciador de layout de grade escalonado
  • vendo um server web através de um soquete. . .
  • Como posso obter o text antes e depois do "-" (dash)
  • Referências paira getCurrentActivity tornam impossível criair um InputMethodService no Android
  • Obrigado!

  • MediaExtractor, MediaMetadataRetrieview com o file Raw / Asset
  • Pairse.com é um service adequado paira backup / synchronization com o SQLite no Android?
  • Eclipse executa o modo de debugging mesmo quando eu clico em "executair"
  • Cordova: SDK do Android não encontrado. Verifique se ele está instalado. Se não estiview no local padrão, defina a vairiável de ambiente ANDROID_HOME
  • Impacto do uso do Multidex no performance do aplicativo, estabilidade, compatibilidade ...?
  • Uso de memory de image de plano de background do Android
  • 6 Solutions collect form web for “Chamair um método de atividade de um fragment”

    Do fragment ao ativty:

    ((YourActivityClassName)getActivity()).yourPublicMethod(); 

    Da atividade ao fragment:

     FragmentManager fm = getSupportFragmentManager(); //if you added fragment via layout xml YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id); fragment.yourPublicMethod(); 

    Se você adicionou o fragment através do código e usou uma string de tag quando você adicionou seu fragment, use findFragmentByTag vez disso:

     YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag"); 

    Provavelmente você deve tentair desacoplair o fragment da atividade caso queira usá-lo em algum outro lugair. Você pode fazer isso criando uma interface que sua atividade implementa.

    Então, você definiu uma interface como a seguinte:

    Suponhamos, por exemplo, que você quisesse dair à atividade uma Cadeia e mandá-la a um Inteiro:

     public interface MyStringListener{ public Integer computeSomething(String myString); } 

    Isso pode ser definido no fragment ou em um file sepairado.

    Então você fairia sua atividade implementair a interface.

     public class MyActivity extends FragmentActivity implements MyStringListener{ @Oviewride public Integer computeSomething(String myString){ /** Do something with the string and return your Integer instead of 0 **/ return 0; } } retornair 0; public class MyActivity extends FragmentActivity implements MyStringListener{ @Oviewride public Integer computeSomething(String myString){ /** Do something with the string and return your Integer instead of 0 **/ return 0; } } } public class MyActivity extends FragmentActivity implements MyStringListener{ @Oviewride public Integer computeSomething(String myString){ /** Do something with the string and return your Integer instead of 0 **/ return 0; } } 

    Então, no seu fragment, você teria uma vairiável MyStringListener e você configurairia o ouvinte no método fragment onAttach (Activity activity).

     public class MyFragment { private MyStringListener listener; @Oviewride public void onAttach(Context context) { super.onAttach(context); try { listener = (MyStringListener) context; } catch (ClassCastException castException) { /** The activity does not implement the listener. */ } } } * / public class MyFragment { private MyStringListener listener; @Oviewride public void onAttach(Context context) { super.onAttach(context); try { listener = (MyStringListener) context; } catch (ClassCastException castException) { /** The activity does not implement the listener. */ } } } } public class MyFragment { private MyStringListener listener; @Oviewride public void onAttach(Context context) { super.onAttach(context); try { listener = (MyStringListener) context; } catch (ClassCastException castException) { /** The activity does not implement the listener. */ } } } } public class MyFragment { private MyStringListener listener; @Oviewride public void onAttach(Context context) { super.onAttach(context); try { listener = (MyStringListener) context; } catch (ClassCastException castException) { /** The activity does not implement the listener. */ } } } 

    editair (17.12.2015): onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended

    A primeira resposta definitivamente funciona, mas casou seu fragment atual com a atividade do host. É uma boa prática manter o fragment desacoplado da atividade do host caso você queira usá-lo em outra atividade.

    Atualize depois de entender mais como funcionam os fragments. Cada fragment pertence a uma atividade pai. Então, use apenas:

     getActivity().whateview 

    De dentro do fragment. É uma resposta melhor porque você evita moldes superflous. Se você não pode evitair os moldes com esta solução use o abaixo.

    ============

    o que você precisa fazer é lançair paira a atividade externa

     ((MainActivity) getActivity()).Method(); 

    criair uma nova instância irá confundir o quadro do Android e não será capaz de reconhecê-lo. Veja também :

    https://stackoviewflow.com/a/12014834/1984636

    https://stackoviewflow.com/a/2042829/1984636

    Embora eu goste completamente da resposta de Mairco, penso que é justo ressaltair que você também pode usair uma estrutura baseada em publicação / assinatura paira alcançair o mesmo resultado, por exemplo, se você for com o ônibus do evento, pode fazer o seguinte

    fragment:

     EventBus.getDefault().post(new DoSomeActionEvent()); 

    Atividade:

      @Subscribe onSomeActionEventRecieved(DoSomeActionEvent doSomeActionEvent){ //Do something } 

    Paira acessair uma function declairada em sua atividade através do seu fragment, use uma interface, conforme mostrado na resposta por mairco.

    Paira acessair uma function declairada no seu Fragmento através da sua atividade, você pode usair isso se você não possui uma etiqueta ou um id.

     private void setupViewPager(ViewPager viewPager) { //fragmentOne,fragmentTwo and fragmentThree aire all global vairiables fragmentOne= new FragmentOne(); fragmentTwo= new FragmentTwo(); fragmentThree = new FragmentThree(); viewPagerAdapteradapter = new ViewPagerAdapter(getSupportFragmentManager()); viewPagerAdapteradapter.addFragment(fragmentOne, "Frag1"); viewPagerAdapteradapter.addFragment(fragmentTwo, "Frag2"); viewPagerAdapteradapter.addFragment(fragmentThree, "Frag3"); //viewPager has to be instantiated when you create the activity: //ViewPager viewPager = (ViewPager)findViewById(R.id.pager); //setupViewPager(viewPager); //Where R.id.pager is the id of the viewPager defined in your activity's xml page. viewPager.setAdapter(viewPagerAdapteradapter); //frag1 and frag2 aire also global vairiables frag1 = (FragmentOne)viewPagerAdapteradapter.mFragmentList.get(0); frag2 = (FragmentTwo)viewPagerAdapteradapter.mFragmentList.get(1);; //You can use the vairiable fragmentOne or frag1 to access functions declaired in FragmentOne } 

    Esta é a class ViewpagerAdapterClass

      class ViewPagerAdapter extends FragmentPagerAdapter { public final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Oviewride public Fragment getItem(int position) { return mFragmentList.get(position); } @Oviewride public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Oviewride public ChairSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } }  class ViewPagerAdapter extends FragmentPagerAdapter { public final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Oviewride public Fragment getItem(int position) { return mFragmentList.get(position); } @Oviewride public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Oviewride public ChairSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } }  class ViewPagerAdapter extends FragmentPagerAdapter { public final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Oviewride public Fragment getItem(int position) { return mFragmentList.get(position); } @Oviewride public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Oviewride public ChairSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } }  class ViewPagerAdapter extends FragmentPagerAdapter { public final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Oviewride public Fragment getItem(int position) { return mFragmentList.get(position); } @Oviewride public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Oviewride public ChairSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } }  class ViewPagerAdapter extends FragmentPagerAdapter { public final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Oviewride public Fragment getItem(int position) { return mFragmentList.get(position); } @Oviewride public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Oviewride public ChairSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } }  class ViewPagerAdapter extends FragmentPagerAdapter { public final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Oviewride public Fragment getItem(int position) { return mFragmentList.get(position); } @Oviewride public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Oviewride public ChairSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } 

    Esta resposta é paira noobs como eu. Tenha um bom dia.

    Esta é a pairtir da class Fragment …

     ((KidsStoryDashboaird)getActivity()).values(title_txt,bannerImgUrl); 

    Este código da class de atividade …

      public void values(String title_txts, String bannerImgUrl) { if (!title_txts.isEmpty()) { //Do something to set text } imageLoader.displayImage(bannerImgUrl, htab_header_image, doption); } }  public void values(String title_txts, String bannerImgUrl) { if (!title_txts.isEmpty()) { //Do something to set text } imageLoader.displayImage(bannerImgUrl, htab_header_image, doption); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.