1

Je suis nouveau dans la programmation android et j'ai besoin d'aide: j'ai besoin d'intercepter le bouton de retour dans un fragment pour afficher un dialogue de sortie-alerte. J'ai essayé à la fois avec onBackPressed et onKeyDown, mais ils ne travaillent pas, je ne sais pas pourquoi ... Voici un code:Comment intercepter le bouton de retour dans un fragment?

public class Home extends Fragment { 
    private Dialog dialog; 
    // onAttach : set activity listener 
    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     // if implemented by activity, set listener 
     // else create local listener (code never executed in this example) 
    } 

    // onCreateView : 
    @Override 
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { 

     // fragment not when container null 
     if (container == null) { 
     return null; 
     } 
     // inflate view from layout 
     final View view = inflater.inflate(R.layout.home,container,false); 

     ... 

     //onBackPressed(); doesn't work, alertDialog comes up only the first time without touching back button 
     return view; 
    } 

Mon "onBackPressed" ...

public void onBackPressed() { 
      new AlertDialog.Builder(getActivity()) 
       .setIcon(android.R.drawable.ic_dialog_alert) 
       .setTitle("Hey!") 
       .setMessage("Exit?") 
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        FragmentActivity i=getActivity(); 
        i.finish(); 
       } 

      }) 
      .setNegativeButton("No", null) 
      .show(); 
     } 

    } 

ici, vous aussi PagerTabsActivity et PagerAdapter, si vous avez besoin ... PagerTabsActivity:

public class PagerTabsActivity extends FragmentActivity { 
    private static int i=0; 
    private static View pagerStrip; 
    // list contains fragments to instantiate in the viewpager 
    List<Fragment> fragments = new Vector<Fragment>(); 
    List<String> fragmentTitles = new Vector<String>(); 
    // page adapter between fragment list and view pager 
    private PagerAdapter mPagerAdapter; 
    // view pager 
    private ViewPager mViewPager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     // creating fragments and adding to list 
     fragments.add(Fragment.instantiate(this, Home.class.getName())); 
     fragmentTitles.add(Home.class.getSimpleName()); 
     fragments.add(Fragment.instantiate(this, Second.class.getName())); 
     fragmentTitles.add(Second.class.getSimpleName()); 
     fragments.add(Fragment.instantiate(this, Third.class.getName())); 
     fragmentTitles.add(Third.class.getSimpleName()); 
     // 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     pagerStrip = findViewById(R.id.pagerTabStrip); 
     if (pagerStrip instanceof PagerTabStrip) { 
      PagerTabStrip pagerTabStrip = (PagerTabStrip) pagerStrip; 
      pagerTabStrip.setDrawFullUnderline(true); 
      pagerTabStrip.setTabIndicatorColorResource(android.R.color.white); 
      // pagerTabStrip.setTextColor(color.white); 
     } else if (pagerStrip instanceof PagerTitleStrip) { 
      PagerTitleStrip pagerTitleStrip = (PagerTitleStrip) pagerStrip; 
      pagerTitleStrip.setTextColor(getResources().getColor(android.R.color.white)); 
     } 

     this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments); 
     mViewPager.setAdapter(this.mPagerAdapter); 
     mViewPager.setCurrentItem(0); 
    } 
} 

PagerAdapter:

public class PagerAdapter extends FragmentPagerAdapter { 
    // private String titles[] = new String[] { "Tab1", "Tab2", "Tab3" }; 
    private List<String> fragmentTitles; 
    private List<Fragment> fragments; 

    public PagerAdapter(FragmentManager fm, List<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

     if (null == fragmentTitles || fragmentTitles.size() <= position) { 
      return " "; 
     } 
     String fragTitle = fragmentTitles.get(position); 
     if (null == fragTitle || fragTitle.trim().length() == 0) { 
      return "No Title"; 
     } 
     // Log.v("TitleAdapter - getPageTitle=", fragmentTitles.get(position)); 
     return fragmentTitles.get(position); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // Log.v("TitleAdapter - getItem=", String.valueOf(position)); 
     return this.fragments.get(position); 
    } 

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

} 

Toute aide sera grandement appréciée! :)

+3

« montrent une sortie d'alerte-dialogue » - qui est une mauvaise idée, tout simplement parce que toutes les données que vous essayez d'enregistrer ici peut être perdu par d'autres moyens (par exemple, l'utilisateur appuie sur HOME). S'il vous plaît ne pas interrompre l'utilisateur avec de telles boîtes de dialogue. Au lieu de cela, enregistrez toutes les données en suspens dans un emplacement temporaire si vous pensez qu'il n'est pas encore prêt à être appliqué au magasin de données principal et informez l'utilisateur de ces données temporaires lorsqu'elles reviennent dans votre application. – CommonsWare

+0

Merci beaucoup pour ce conseil :) Je vais le garder à l'esprit! En passant, je ne fais qu'une application très simple avec des maquettes interactives, alors maintenant je veux juste savoir comment résoudre ce problème! – Kurtis92

Répondre

0

Vous devez remplacer la méthode .. essayez ce code:

@Override 
public void onBackPressed() { 
    new AlertDialog.Builder(this) 
     .setTitle("Exit") 
     .setMessage("Are you sure you want to exit?") 
     .setNegativeButton("No", null) 
     .setPositiveButton("Get me out!", new OnClickListener() { 

      public void onClick(DialogInterface arg0, int arg1) { 
       FragmentActivity i=getActivity(); 
       i.finish(); 
      } 
     }).create().show(); 
} 
+0

Oui, j'ai déjà essayé, j'ai déjà posté un code très similaire ... Je vais éditer le premier post pour mieux le montrer! – Kurtis92

Questions connexes