Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么getFragmentManager().findFragmentByTag(String.valueOf(某些整数))不起作用?_Android_Android Fragments - Fatal编程技术网

Android 为什么getFragmentManager().findFragmentByTag(String.valueOf(某些整数))不起作用?

Android 为什么getFragmentManager().findFragmentByTag(String.valueOf(某些整数))不起作用?,android,android-fragments,Android,Android Fragments,我有一个片段堆栈,并尝试使用getFragmentManager().findFragmentByTag()方法返回堆栈 如果以这种方式调用,此方法将返回对象: getFragmentManager().findFragmentByTag("3") 计数片段{40d68d00#2 id=0x7f090000 3} 但如果我将变量用作参数,它将返回NULL: int nextLevel = currentPositionInTheStack+1;

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

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

getFragmentManager().findFragmentByTag("3")
计数片段{40d68d00#2 id=0x7f090000 3}

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

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

任何关于为什么会发生这种情况的建议


提前感谢您

您如何设置碎片标签? 这样的事情是必要的:

ft.add(fragmentContainerId, mfragment, String.valueOf(++currentPositionInTheStack));

已了解如何在堆栈中前后导航:

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

对于向后导航,必须覆盖onBackPressed方法:

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

原始问题中的片段为NULL,应该为NULL,但是,如果我执行getFragmentManager(),它为什么返回对象。例如,findFragmentByTag(“3”)不清楚。

您确定nextLevel等于3吗?在第一个失败的代码中,如果尝试
字符串,会发生什么情况。valueOf(3)
?3是一个例子,我尝试了不同的整数GetFragmentManager();Fragment newFragment=CountingFragment.newInstance(mStackLevel);FragmentTransaction ft=getFragmentManager().beginTransaction();ft.setCustomAnimations(R.animator.fragment\u slide\u left\u enter,R.animator.fragment\u slide\u left\u exit,R.animator.fragment\u slide\u right\u enter,R.animator.fragment\u slide\u right\u exit);ft.add(R.id.simple_fragment,newFragment,String.valueOf(mStackLevel));ft.addToBackStack(空);ft.commit()@卡蒂亚:请不要在评论中张贴代码块——这很难阅读。编辑您的原始问题,只需留下评论,告诉对方查看您编辑的问题。如果这样说,您在原始问题中发布的第二位代码将失败,因为您正在将“a”预先挂起到int,以生成
nextLevelTag
。在您在上面的注释中发布的代码中,您将标记设置为仅int的字符串表示形式。添加片段并为此片段设置标记时,我尝试了标记的字符串表示形式和整数到字符串的转换,但谢谢。
        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();

                }

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