Java onCreateView中的if块不是';t执行

Java onCreateView中的if块不是';t执行,java,android,android-fragments,Java,Android,Android Fragments,我正在构建一个有多个片段的应用程序,其中大约一半的片段包含一个用户可以用手指画线的视图(我们称之为画布)。我试图做的是保存用户绘制的线条,然后用户将片段留给另一个片段,并在该片段的画布上绘制一些线条,然后可以返回到前一个片段(第二个片段的绘图将被保存),其中该片段的绘图只会显示在画布中。如果用户返回到第二个片段,则仅显示第二个片段的图形。我正在使用可包裹界面 但是,如果在一个片段中的一个画布上绘制图形,那么该图形也将在另一个片段中显示,并且任何新添加的内容都将在第一个画布中显示 在使用了mult

我正在构建一个有多个片段的应用程序,其中大约一半的片段包含一个用户可以用手指画线的视图(我们称之为画布)。我试图做的是保存用户绘制的线条,然后用户将片段留给另一个片段,并在该片段的画布上绘制一些线条,然后可以返回到前一个片段(第二个片段的绘图将被保存),其中该片段的绘图只会显示在画布中。如果用户返回到第二个片段,则仅显示第二个片段的图形。我正在使用可包裹界面

但是,如果在一个片段中的一个画布上绘制图形,那么该图形也将在另一个片段中显示,并且任何新添加的内容都将在第一个画布中显示

在使用了multiple Log.d之后,我注意到它没有进入检查savedInstanceState是否为null的if语句

片段一

每个片段本质上都是相同的代码,只是获得了不同的画布id

导入android.os.Bundle;
导入android.util.DisplayMetrics;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.fragment.app.fragment;
公共类LineLHwFragment扩展了片段{
私人画景画景;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图v=充气机。充气(右布局。碎片线,容器,假);
paintView=v.findviewbyd(R.id.linelpainview);
//如果未执行此代码,logcat将显示:first if line fail:
//onCreateView:如果行失败,则为第一行
如果(savedInstanceState!=null){
Log.d(“第一行如果成功”,“onCreateView:第一行如果成功”);
if(savedInstanceState.containsKey(“线路测试”)){
Log.d(“行如果工作”,“onCreateView:行如果工作”);
设置路径(savedInstanceState.getParcelableArrayList(“行测试”));
}否则{
Log.d(“行失败”,“onCreateView:行失败”);
}
}否则{
Log.d(“第一行失败”,“onCreateView:第一行失败”);
}
DisplayMetrics=新的DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(度量);
paintView.init(度量);
设置选项菜单(真);
返回v;
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(右菜单。主菜单,菜单);
super.onCreateOptions菜单(菜单,充气机);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
病例R.id.normal:
paintView.normal();
返回true;
案例R.id.clear:
paintView.clear();
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
SAVEInstanceState上的公共无效(@NonNull Bundle outState){
super.onSaveInstanceState(超出状态);
putParcelableArrayList(“线测试”,paintView.getpath());
}
}

我尝试过使用其他方法,例如:if(!savedInstanceState.isEmpty()),但这只会导致应用程序崩溃。有没有办法解决这个问题?

在片段之间切换时,是否使用
savedInstanceState
获取以前的片段数据,然后返回到在其
savedInstanceState
上保存数据的特定片段?我相信我正在检查“onCreateView”中的“savedInstanceState”是否为空,然后检查键它具有适当的arraylist(保存在“onSaveInstanceState”中,我认为我做得正确)并将该数据提供给paintView。我的意思是,如果当您来自另一个片段时调用了
onCreateView
,则肯定
savedInstanceState
将为空,我只需要知道,如果我第一次访问片段,
savedInstanceState
应该为空,但是当我返回时,它不应该为空,并且来自第一个片段的图形应该只保留在相关片段中
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class LineLHwFragment extends Fragment {

private PaintView paintView;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_line_l_hw, container, false);
        paintView = v.findViewById(R.id.lineLPaintView);

        // this if code is not getting executed, the logcat will show: first if line fail: 
        //onCreateView: first if line fail 
        if (savedInstanceState != null) {
            Log.d("first line if success", "onCreateView: first line if success");
            if (savedInstanceState.containsKey("line test")) {
                Log.d("line if working", "onCreateView: line if working");
                paintView.setPaths(savedInstanceState.<FingerPath>getParcelableArrayList("line test"));

            } else {
                Log.d("line fail", "onCreateView: line fail");
            }
        } else {
            Log.d("first if line fail", "onCreateView: first if line fail");
        }


    DisplayMetrics metrics = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
    paintView.init(metrics);
    setHasOptionsMenu(true);
        return v;

}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.normal:
            paintView.normal();
            return true;

        case R.id.clear:
            paintView.clear();
            return true;
    }

    return super.onOptionsItemSelected(item);
}


@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelableArrayList("line test", paintView.getPaths());
}


}