bonjour, etant en train de créer une application je rencontre actuellement un probleme.j'ai une main activity qui grace au fragment manager gère l'ajout de fragment.lors qu'une personne clique sur un bouton d'un des deux fragment, le clique est diffusé a l'activité parent grace a callback et un onclick listener comme suit:
code du premier fragment:
public class StartPresentationFragment extends Fragment implements View.OnClickListener {
private Button startbutton;
public StartPresentationFragment() {
// Required empty public constructor
}
//2 - Declare callback
private StartPresentationFragment.OnButtonClickedListener mCallback;
// 1 - Declare our interface that will be implemented by any container activity
public interface OnButtonClickedListener {
public void onButtonClicked(View view);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Inflate the layout of MainFragment
View result=inflater.inflate(R.layout.fragment_start_presentation, container, false);
//Set onClickListener to button "SHOW ME DETAILS"
result.findViewById(R.id.startbutton).setOnClickListener(this);
return result;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
// 4 - Call the method that creating callback after being attached to parent activity
this.createCallbackToParentActivity();
}
@Override
public void onClick(View v) {
//Here is handled the button click
// 5 - Spread the click to the parent activity
mCallback.onButtonClicked(v);
}
// 3 - Create callback to parent activity
private void createCallbackToParentActivity(){
try {
//Parent activity will automatically subscribe to callback
mCallback = (StartPresentationFragment.OnButtonClickedListener) getActivity();
} catch (ClassCastException e) {
throw new ClassCastException(e.toString()+ " must implement OnButtonClickedListener");
}
}
}
et voici le code de l'activité parent :
public class StartActivity extends AppCompatActivity implements StartcheckAccountFragment.OnButtonClickedListener{
//temporaire
private int i;
public static boolean startbuttonclicked;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
//initialiser l'ecran de chargement
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.setReorderingAllowed(true)
.add(R.id.fragment_container_view_start_activity, LoadingFragment.class, null)
.commit();
}
if (haveInternetConnection() == true)
{
//Le périphérique est connecté
//temporaire
i=1;
// TODO: changer la valeur et vérifier si l'utilisateur n'avait pas déja un compte
if(i==0)
{
//TODO : créer un intent vers la page d'accueil et le menu
}
else
{
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.setReorderingAllowed(true)
.add(R.id.fragment_container_view_start_activity, StartPresentationFragment.class, null)
.commit();
}
}
}
else
{
// Faire quelque chose s'il n'est pas connecté
Snackbar snackbar= Snackbar.make(findViewById(R.id.principalecontainer),"vous n'etes pas connecté a internet", Snackbar.LENGTH_SHORT);
snackbar.show();
//timer pour 5 secondes
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (haveInternetConnection() == true)
{
//Le périphérique est connecté
//temporaire
i=1;
// TODO: changer la valeur et vérifier si l'utilisateur n'avait pas déja un compte
if(i==0)
{
//TODO : créer un intent vers la page d'accueil et le menu
}
else
{
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.setReorderingAllowed(true)
.add(R.id.fragment_container_view_start_activity, StartcheckAccountFragment.class, null)
.commit();
}
}
}
else
{
// Faire quelque chose s'il n'est pas connecté
Snackbar snackbar= Snackbar.make(findViewById(R.id.principalecontainer),"Nous ne pouvons pas nous connecter a internet pour le moment.merci de réessayer plus tard.", Snackbar.LENGTH_SHORT);
snackbar.show();
}
}
}, 5_000); // LENGTH_SHORT is usually 5 second long
}
}
@Override
public void onButtonClicked(View view) {
Log.e(getClass().getSimpleName(),"Button clicked !");
}
}
mais le probleme c'est que j'aimerais faire un callback d'un bouton situé dans le deuxième fragment, mais le truc c 'est que je ne peux pas faire deux implements dans la classe car il y a deja :
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.