2012-07-09 39 views
1

我的Android應用程序中包含一個自定義後退按鈕。點擊片段時我的自定義動畫是好的,但似乎我不能應用動畫時,單擊我自己的後退按鈕,甚至是後退按鈕的Android。我不知道如何解決它,我已經將這些代碼包含在我的Activity類中,但它似乎不起作用。Android後退按鈕和片段 - 動畫無效

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
     case R.id.menuitem1: 
      break; 
     case R.id.menuitem2: 
      super.onBackPressed(); 
      overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); 
      break; 

     default: 
      break; 
     } 

     return true; 
    } 

我也試着重寫onbackPressed方法,但它似乎也沒有工作

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 

     overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); 

    } 

我不知道如何實現這一個...請幫我問心無愧這一個,因爲我們由於這個原因正在耗盡時間。謝謝

等待積極的迴應。

My Android Application Screencast http://content.screencast.com/users/junnel1001/folders/Jing/media/2a13fd01-f467-4889-ac21-743c188a0f67/2012-07-09_1032.png

編輯

確定這就是我建立了我的片段

在我的主要活動:

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 


    setContentView(R.layout.main); 


    ActionBar actionBar = getActionBar(); 
    Drawable myIcon = getResources().getDrawable(R.drawable.header_bg); 
    actionBar.setSplitBackgroundDrawable(myIcon); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = actionBar.newTab().setIcon(R.drawable.about); 
    ActionBar.Tab tabB = actionBar.newTab().setIcon(R.drawable.sponsors); 
    ActionBar.Tab tabC = actionBar.newTab().setIcon(R.drawable.map); 
    ActionBar.Tab tabD = actionBar.newTab().setIcon(R.drawable.destination); 
    Fragment aboutTab = new PhotosActivity(); 
    Fragment sponsorTab = new SongsActivity(); 
    Fragment mapTab = new HCCMapActivity(); 
    Fragment DestinationTab = new DestinationActivity(); 
    tabA.setTabListener(new MyTabsListener(aboutTab)); 
    tabB.setTabListener(new MyTabsListener(sponsorTab)); 
    tabC.setTabListener(new MyTabsListener(mapTab)); 
    tabD.setTabListener(new MyTabsListener(DestinationTab)); 
    actionBar.addTab(tabD, 0, true); 
    actionBar.addTab(tabC, 1, false); 
    actionBar.addTab(tabA, 2, false); 
    actionBar.addTab(tabB, 3, false); 

} 

protected class MyTabsListener implements TabListener{ 

     Fragment fragment; 

     public MyTabsListener(Fragment fragment){ 

      this.fragment = fragment; 
     } 

     public void onTabSelected(Tab tab, FragmentTransaction ft) {   
      Log.i("Tab Position Now", Integer.toString(tab.getPosition())); 
      if (myTabPosition < 0){ 
       ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);  
      }else{ 
       if (myTabPosition > tab.getPosition()){ 
        ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); 
        Log.i("Tab Position Before",Integer.toString(myTabPosition)); 
       }else{ 
        ft.setCustomAnimations(R.anim.slide_out_left, R.anim.slide_out_right);  
        Log.i("Tab Position Before1",Integer.toString(myTabPosition)); 
       } 
      } 
      myTabPosition = tab.getPosition(); 
      ft.replace(R.id.fragment_place, fragment, null);  
     // ft.commit(); 
     } 

     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      ft.remove(fragment); 

     } 

     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 





    } 

在我的片段中的一個類別:

例如destinationActivity

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
      View view = inflater.inflate(R.layout.destination_layout, container, false);         
      ArrayList<Category> category = new ArrayList<Category>(); 
      ListView lv = (ListView)view.findViewById(android.R.id.list); 
      category.add(new Category("Image", "Image Banner")); 
      category.add(new Category("HISTORICAL TOURS", "Historical Desc")); 
      category.add(new Category("CULTURAL TOURS", "Cultural Desc")); 
      lv.setAdapter(new CategoryAdapter(getActivity(), R.layout.list_view, category)); 
      lv.setClickable(true); 
      super.setMenuVisibility (false); 
      super.setHasOptionsMenu(false); 
      return view; 
    } 


    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     Log.i("FragmentList", "Item clicked: " + id); 
     final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     if (id == 1){ 
     // ft.remove(fragment) 
      ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_in_right); 
      ft.replace(R.id.fragment_place, new ListLocationActivity(), null); 
      ft.addToBackStack(null); 
      ft.commit(); 
     }else if (id == 2){ 
      ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_in_right); 
      ft.replace(R.id.fragment_place, new ListLocationActivity(), null); 
      ft.addToBackStack(null); 
      ft.commit(); 
     } 

    } 
+0

是否需要添加第二個後退按鈕?在Android Design Pattern doco(http://developer.android.com/design/patterns/index.html)中不鼓勵這樣的事情。但是,這並不能真正解決您的潛在問題。你能否闡明你如何設置你的片段? – 2012-07-09 02:48:43

+0

好的...即使在我的android應用程序中沒有自定義後退按鈕。動畫也不適用於android的後退按鈕(在虛擬導航控件中)...請回復...謝謝 – 2012-07-09 03:56:49

+0

有一個錯誤在ICS compat庫中遇到此問題 - http://code.google.com/p/android/issues/detail?id=15623&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars - 是否已更新到最新版本compat庫?沒有任何我能看到的第一眼看起來不對...... – 2012-07-09 04:47:28

回答

1

您是否確實需要重寫後退功能?你爲什麼不創建一個新的事件觸發器,以便它具有自己的功能而不是重寫?所以當「這個按鈕被按下」,「滑入/滑出」。然後,如果你想完成你可以把一個活動「結束()」命令或「finishActivity()」

Android: Go back to previous activity

「如果你需要返回使用後退按鈕以前的活動,您不會使用overridePendingTransition()進行動畫轉換,對於只出現一次然後從歷史堆棧中移除的活動,例如splash活動,overridePendingTransition()是完美的如果您需要動畫回到以前的活動,您可以考慮其他選擇「。

http://www.anddev.org/novice-tutorials-f8/splash-fade-activity-animations-overridependingtransition-t9464.html

+0

我只是想實現後退按鈕的自定義動畫...但我不知道該怎麼做....例如..如果我想創建此按鈕的自己的功能...我怎麼去實現它也android的內置後退按鈕? – 2012-07-09 04:22:46

+0

只是一個奇怪的問題,當你嘗試你的方法覆蓋的底部代碼時,你是否改變了你的case語句來調用你的onBackPressed版本?我從來沒有見過任何人在case語句中放入「super」關鍵字,因爲它用於覆蓋具有相同名稱的方法。 – sksallaj 2012-07-09 04:50:01