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! :)
« 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
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