0

我有一堆片段并尝试使用 getFragmentManager().findFragmentByTag() 方法返回堆栈。

如果以这种方式调用,此方法会返回对象:

getFragmentManager().findFragmentByTag("3")

CountingFragment{40d68d00 #2 id=0x7f090000 3}

但如果我将变量用作参数,它将返回 NULL:

                int nextLevel = currentPositionInTheStack+1;
                getFragmentManager().findFragmentByTag(String.valueOf(nextLevel));

或者

                int nextLevel = currentPositionInTheStack+1;
                String nextLevelTag = "a" + nextLevel;
                getFragmentManager().findFragmentByTag(nextLevelTag);

任何建议为什么会发生这种情况,

先感谢您

4

2 回答 2

0

已经弄清楚如何在堆栈中向前和向后导航:

对于前向导航,如果下一个片段已经存在,则使用 hide() 和 show() 方法:

        Button button = (Button)findViewById(R.id.new_fragment);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                CountingFragment currentFragment = (CountingFragment)getFragmentManager().findFragmentByTag(String.valueOf(currentPositionInTheStack));
                int nextLevel = currentPositionInTheStack+1;
                currentPositionInTheStack++;
                CountingFragment nextFragment = (CountingFragment)getFragmentManager().findFragmentByTag(String.valueOf(currentPositionInTheStack));
                if (nextFragment == null) {
                    addFragmentToStack();

                }
                else
                {
                    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                    fragmentTransaction.hide(currentFragment);
                    fragmentTransaction.show(nextFragment);
                    fragmentTransaction.commit();

                }

            }
        });

对于后退导航,必须重写 onBackPressed 方法:

        public void onBackPressed() {
            super.onBackPressed();  
            currentPositionInTheStack--;
            Log.d("Current Position In The Stack", String.valueOf(currentPositionInTheStack));
            if (currentPositionInTheStack ==0) {
                //do smth
            } }

原始问题中的 Fragment 是 NULL 并且应该是 null,但是,为什么它返回 Object ,如果我确实 getFragmentManager().findFragmentByTag("3"),例如,尚不清楚。

于 2013-08-20T10:39:43.400 回答
0

你如何设置你的fragmentTag?像这样的东西是必要的:

ft.add(fragmentContainerId, mfragment, String.valueOf(++currentPositionInTheStack));
于 2013-08-14T12:38:13.093 回答