当前位置: 代码迷 >> Android >> backPress是如何工作的?
  详细解决方案

backPress是如何工作的?

热度:102   发布时间:2023-08-04 10:22:35.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");
    }
}

在“产品片段”上,我有一个列表,可以在其中再次调用另一个片段。

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

DrawerFragmentActivity上的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(默认情况下,“配置文件”页面)->产品->交易。 抽屉图标也将在交易屏幕上可见,用户可以在使用抽屉的交易屏幕上再次单击我的卡屏幕。

当用户单击产品时,它将再次打开交易页面,一切正常。 现在发生的是,当我们单击事务返回时,它出现在“产品”页面上,但是当我再次单击“产品列表”屏幕(框架)时,与“产品列表”和“事务”屏幕重叠。

很抱歉,如果我感到困惑,请询问您是否理解。 我可以解释。

谢谢。

片段回压工作代码

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

将以下代码用于片段中的后按。

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

此代码可帮助您实现片段中的后备功能。

我建议您实现一个接口来管理后退。 是一篇很好的博客文章,可帮助您了解此过程

  相关解决方案