2015-10-19 12 views
0

我想在碎片上使用背壓。我無法修復它。以下是我的代碼如下。backPress如何在片段中工作?

/** 
* Diplaying fragment view for selected nav drawer list item 
* */ 
private void displayView(int position) { 
    // update the main content by replacing fragments 
    Fragment fragment = null; 
    if (position!=3){ 
     pos = position; 
    } 
    switch (position) { 
     case 0: 
      fragment = new Profile(); 
      break; 
     case 1: 
      fragment = new Products(); 
      break; 
     case 2: 
      fragment = new Help(); 
      break; 
     case 3: 
      DialogLogout(DrawerFragment.this, getString(R.string.logout), getString(R.string.cofirm_logout)); 

      break; 
     default: 
      break; 
    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.frame_container, fragment) 
       .commit(); 
     // update selected item and title, then close the drawer 
     mDrawerList.setItemChecked(pos, true); 
     mDrawerList.setSelection(pos); 
     setTitle(navMenuTitles[pos]); 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } else { 
     // error in creating fragment 
     Log.e("MainActivity", "Error in creating fragment"); 
    } 
} 

關於產品片段我有列表,我再次用它來調用另一個片段。上DrawerFragmentActivity

listCards.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      Fragment fragment = new Transactions(); 

      if (fragment != null) { 
       FragmentManager fragmentManager = getFragmentManager(); 
       fragmentManager.beginTransaction() 
        // .replace(R.id.frame_container, fragment) 
         .remove(Products.this) 
         .add(R.id.frame_container, fragment) //replace(R.id.frame_container, fragment) 
         .addToBackStack(null) 
         .commit(); 
       } else { 
       // error in creating fragment 
       Log.e("MainActivity", "Error in creating fragment"); 
      } 
     } 
    }); 
    return rootView; 
} 

BackPress功能是象下面這樣:

@Override 
public void onBackPressed() { 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    int count = fragmentManager.getBackStackEntryCount(); 
    if (count > 0) { 
     fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    } else { 
     super.onBackPressed(); 
    } 
} 

功能會是這樣,DrawerFragmentActivity(默認資料頁) - >產品 - >交易。 「交易」屏幕上也會顯示抽屜圖標,用戶可以使用抽屜在交易屏幕上再次點擊我的卡片屏幕。

當用戶點擊產品時,它會再次打開交易頁面,它工作正常。現在發生了什麼,當我們點擊返回到產品頁面上的交易時,但是當我再次點擊產品列表屏幕(框架)與產品列表和交易屏幕重疊時。

對不起,如果我很困惑,請問你是否不明白。我可以解釋。

謝謝。

回答

3

片段回按工作代碼

public class ChiefFragment extends Fragment { 
View view; 

// public OnBackPressedListener onBackPressedListener; 

@Override 
public View onCreateView(LayoutInflater inflater, 
    ViewGroup container, Bundle args) { 

view = inflater.inflate(R.layout.activity_chief, container, false); 
getActivity().getActionBar().hide(); 
view.setFocusableInTouchMode(true); 
view.requestFocus(); 
view.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     Log.i(getTag(), "keyCode: " + keyCode); 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      getActivity().getActionBar().show(); 
      Log.i(getTag(), "onKey Back listener is working!!!"); 
      getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
      // String cameback="CameBack"; 
      Intent i = new Intent(getActivity(), home.class); 
      // i.putExtra("Comingback", cameback); 
      startActivity(i); 
      return true; 
     } else { 
      return false; 
     } 
    } 
}); 
return view; 
} 
} 
+1

非常感謝,我一直在努力從最後一個星期。你真的做了我的一天。 :) 再次感謝。 – Shivv

+0

歡迎兄弟 – Android

-1

我會建議你實現管理堆棧中的接口。 Here是一個很好的博客文章,它可以幫助你理解這個過程。

0

使用下面的代碼在片段中反壓。

public class DashBoard extends Fragment { 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
View rootView = inflater.inflate(R.layout.dashboard, container, false); 
rootView.setFocusableInTouchMode(true); 
rootView.requestFocus(); 
rootView.setOnKeyListener(new View.OnKeyListener(){ 
@Override 
public boolean onKey(View v, int keyCode, KeyEvent event){ 
if (keyCode == KeyEvent.KEYCODE_BACK) { 
getActivity().finish(); } 
return true; 
} 
return false; 
} 
}); 
} 

此代碼可幫助您實現您在片段中的回放。