1

我是新來的android編程,我需要幫助:我需要攔截Fragment中的按鈕以顯示退出警報對話框。我試着用都和onBackPressed onkeydown事件,但他們不工作,我不知道爲什麼...... 這裏是一些代碼:如何攔截片段中的後退按鈕?

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; 
    } 

我「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(); 
     } 

    } 

這裏還PagerTabsActivity和PagerAdapter,如果你需要... 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(); 
    } 

} 

任何幫助將不勝感激! :)

+3

「顯示的退出警報的對話」 - 這是一個壞主意,只是因爲不管你的數據是試圖在這裏保存可能以其他方式丟失(例如,用戶按HOME)。請不要用這樣的對話中斷用戶。相反,如果您認爲尚未準備好應用到主數據存儲區,則可以將任何未完成的數據保存到臨時點,並在用戶返回到您的應用時告知用戶該臨時數據。 – CommonsWare 2013-05-12 12:43:23

+0

非常感謝這個建議:)我會牢記它!順便說一句,我只用交互式模型做一個非常簡單的應用程序,所以現在我只想知道如何解決這個問題! – Kurtis92 2013-05-12 15:01:22

回答

0

你需要覆蓋的方法..嘗試這個代碼:

@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

是的,我已經嘗試過了,我已經發布了一個非常類似的代碼...我將編輯第一篇文章以更好地展示它! – Kurtis92 2013-05-12 12:57:09