android - 显示在 android 中按下的隐藏 fragment onbackkey

标签 android android-fragments

我在做什么::

  • 我在按下 Actionbar 按钮时将 fragment 添加到容器中 同时我隐藏了之前的 fragment
  • 现在按下后退键我只想显示隐藏的 fragment

发生了什么::

  • 不再显示之前的 fragment ,而是删除了整个 Activity
  • 如何克服这个问题
  • 我也试过 onBackpressed ... 还是一样的结果

发生此操作的代码::

}else if(item.getItemId()==R.id.searchID){
            /*Intent intent=new Intent(MainActivity.this,SearchActivity.class);
            startActivity(intent);*/

            ft1=getSupportFragmentManager().beginTransaction();
            ft1.hide(fragment1);
            ft1.add(R.id.content_frame, fragSearch);
            ft1.commit();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }    


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode == KeyEvent.KEYCODE_BACK)
        {
            ft1=getSupportFragmentManager().beginTransaction();
            ft1.show(fragment1);
            ft1.commit();
        }
        return super.onKeyDown(keyCode, event);
    }

{完整代码}

MainActivity.java

 public class MainActivity extends SherlockFragmentActivity implements OnItemClickListener{

        private DrawerLayout drawlayout=null;
        private ListView listview=null;
        private ActionBarDrawerToggle actbardrawertoggle=null;

        FragmentTransaction ft1 ;
        FragSearch fragSearch=new FragSearch();
        mFragSortingHome fragment1=new mFragSortingHome();

        private String[] myfriendname=null;
        private int[] photo=null;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.drawer_activity_main);
            //Code moved to a seperate function from onCreate with a call in it for clarity
            drawerConfig(savedInstanceState);

        }

        @Override
        protected void onPostCreate(Bundle savedInstanceState) {
            super.onPostCreate(savedInstanceState);
            actbardrawertoggle.syncState();
        }

        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            actbardrawertoggle.onConfigurationChanged(newConfig);
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            if(item.getItemId()==android.R.id.home)
            {
                if(drawlayout.isDrawerOpen(listview))
                {
                    drawlayout.closeDrawer(listview);
                }
                else {
                    drawlayout.openDrawer(listview);
                }
            }else if(item.getItemId()==R.id.searchID){
                /*Intent intent=new Intent(MainActivity.this,SearchActivity.class);
                startActivity(intent);*/

                ft1=getSupportFragmentManager().beginTransaction();
                ft1.hide(fragment1);
                ft1.add(R.id.content_frame, fragSearch);
                ft1.commit();
                return true;
            }
            return super.onOptionsItemSelected(item);
        }    


        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
            if (keyCode == KeyEvent.KEYCODE_BACK)
            {
                ft1=getSupportFragmentManager().beginTransaction();
                ft1.show(fragment1);
                ft1.commit();
            }
            return super.onKeyDown(keyCode, event);
        }
.             .            .      .
. . . . . other code . . .. . . . . .
.            .           .       .

{编辑}

else if(item.getItemId()==R.id.searchID){
            /*Intent intent=new Intent(MainActivity.this,SearchActivity.class);
            startActivity(intent);*/

            ft1=getSupportFragmentManager().beginTransaction();
            //ft1.hide(fragment1);
            ft1.add(R.id.content_frame, fragSearch);
            ft1.addToBackStack(null);
            ft1.commit();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }    

    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode == KeyEvent.KEYCODE_BACK)
        {
            getSupportFragmentManager().popBackStack();
        }
        return super.onKeyDown(keyCode, event);
    }

我可以回到之前的 fragment ,但 Activity 也立即被删除,我无法阻止 Activity 被删除

最佳答案

在返回时尝试弹出当前 fragment 以显示前一个 fragment

public boolean onKeyDown(int keyCode, KeyEvent event)
        {
            if (keyCode == KeyEvent.KEYCODE_BACK)
            {
                getActivity().getSupportFragmentManager().popBackStack();
            }
            return super.onKeyDown(keyCode, event);
        }

当添加一个 fragment 时,你也应该将它添加到backstack..所以放在ft1.commit()之前;

ft1.addToBackStack(null);

关于android - 显示在 android 中按下的隐藏 fragment onbackkey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23420447/

相关文章:

java - 方向改变后无法与 Fragment 正确通信

android - 如何制作 ViewPager 循环?

android - 如何添加动态 fragment 标签项

java - HttpURLConnection.getContentLength() 返回 -1

android - 可移植转换后: This item is not compatible with your device

java - Android:使用 SSL 交换消息时出现问题

android - 如何在 tablayout 底部显示 admob 广告

java - 如何将 ListView 项添加到整个其他 ListView

Android : inflate() ignoring utilizing root layout width/height defined in style sheets. 二进制 XML 错误

android - 如何使用 Fiddler4 从 Android App 捕获 HTTPS(TLS 1.0) 通信?