Como chamar um método de um fragment em uma activity?

746 views
Skip to first unread message

Daniel Vitsaus

unread,
Nov 14, 2017, 5:19:28 PM11/14/17
to Android Brasil - Dev
Pessoal, eu preciso usar um método de uma fragment dentro de uma activity, mas eu não consigo passar uma referencia para essa activity. Alguem pode me ajudar?

A ideia é essa:

public class MinhaFragment extends Fragment{
...

   
@Override
   
public void onClick(View view) {
     
if (view.getId() == R.id.fab) {
       
Intent intent = new Intent(this.getContext(), MinhaActivity.class);
        startActivity
(intent);
     
}
   }

   
public void showMessage(String message) {
     
Snackbar snackbar = Snackbar.make(this.getView(), message, Snackbar.LENGTH_LONG);
      snackbar
.show();
   
}

...

}


public class MinhaActivity extends Activity{
...

   
@Override
   
public void onClick(View view) {
     
//chamar o metodo do fragment aqui por exemplo
     minhaFragment
.showMessage("Teste");
   }
...
}

Qualquer ajuda é bem vinda.
Desde já agradeço.

Willian do Amor

unread,
Nov 15, 2017, 5:47:23 AM11/15/17
to androidb...@googlegroups.com
Na verdade o que eu faço é usar callback. Assim eu faço a interface de callback me dar o retorno e executo o método de acordo com o retorno.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Tiago Grillo

unread,
Nov 16, 2017, 5:32:09 AM11/16/17
to Lista Android
+1 também faço por meio de callback

Daniel Vitsaus

unread,
Nov 18, 2017, 8:25:35 AM11/18/17
to Android Brasil - Dev
 Willian, obrigado pela ajuda, mas eu n]ão conseguir fazer com callbacks. A solução que eu encontrei foi com BroadcastReceiver  usando com LocalBroadcastManager.
Esse post (https://pt.stackoverflow.com/questions/255508/como-chamar-um-m%C3%A9todo-de-um-fragment-em-uma-activity) , me deram um outra solução que eu ainda não usei, mas achei bem interessante, que é usar o 
onActivityResult 

Com o callbacks eu fiz dessa forma

public interface Callbacks {
 
public void chamaMetodo(String message);
}


public class MinhaFragment extends Fragment implements Callbacks{

...

   
@Override
   
public void onClick(View view) {
     
if (view.getId() == R.id.fab) {
       
Intent intent = new Intent(this.getContext(), MinhaActivity.class);
        startActivity
(intent);
     
}
   
}

   
public void showMessage(String message) {
     
Snackbar snackbar = Snackbar.make(this.getView(), message, Snackbar.LENGTH_LONG);
      snackbar
.show();
   
}


   
public void chamaMetodo(String message) {
       showMessage
(String message)
   
}

...

}


public class MinhaActivity extends Activity {


 
private Callbackd callbacks;

...

   
@Override
   
public void onClick(View view) {

     
//chamar o metodo do Callbaks
     callbacks
.chamaMetodo("Teste");
   
}

 
@Override
   
public void onAttachFragment(Fragment fragment) {
       
super.onAttachFragment(fragment);
       
try {
            callbacks
= (Callbacks) fragment;
       
} catch (ClassCastException e) {
           
throw new ClassCastException(fragment.toString() + " must implement OnArticleSelectedListener");
       
}
   
}
...

}


E você sabe me dizer qual seria a melhor opção entre as três? 

Reply all
Reply to author
Forward
0 new messages