Android Can';找不到上下文缺失的地方

Android Can';找不到上下文缺失的地方,android,android-fragments,illegalstateexception,Android,Android Fragments,Illegalstateexception,我一直在重构以前的一个项目,以使用片段,而不是作为学校作业创建单独的活动。近一个小时来,我一直在试图找出这个错误在哪里,但运气不好。当我添加这一行canvas.setColor(颜色,位置)时,我缺少上下文 以下是主要活动: public class MainActivity extends AppCompatActivity implements PaletteFragment.SpinnerSelectedInterface { @Override

我一直在重构以前的一个项目,以使用片段,而不是作为学校作业创建单独的活动。近一个小时来,我一直在试图找出这个错误在哪里,但运气不好。当我添加这一行
canvas.setColor(颜色,位置)时,我缺少上下文

以下是主要活动:

    public class MainActivity extends AppCompatActivity implements PaletteFragment.SpinnerSelectedInterface {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            PaletteFragment palette = PaletteFragment.newInstance();

            Bundle bundle = new Bundle();
            bundle.putStringArray(KeyData.PASS_COLOR, getResources().getStringArray(R.array.colors));
            bundle.putStringArray(KeyData.PASS_POSITION, getResources().getStringArray(R.array.colorNames));
            palette.setArguments(bundle);

            getSupportFragmentManager().beginTransaction().add(R.id.palette_fragment, palette).commit();
        }

        @Override
        public void setCanvasColor(String color, int position) {
            CanvasFragment canvas = CanvasFragment.newInstance(null);
            getSupportFragmentManager().beginTransaction().add(R.id.canvas_fragment, canvas).addToBackStack(null).commit();
            canvas.setColor(color, position);
        }
    }
下面是片段:

public class CanvasFragment extends Fragment {
    private TextView displayColor;
    private View background;

    public CanvasFragment() {
        // Required empty public constructor
    }

    public static CanvasFragment newInstance(Bundle bundle) {
        CanvasFragment fragment = new CanvasFragment();
        fragment.setArguments(bundle);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_canvas, container, false);
        displayColor = (TextView) v.findViewById(R.id.displayColor);
        background = (View) v.findViewById(R.id.canvas_fragment);
        return v;
    }

    public void setColor(String color, int position){
        String[] names = getResources().getStringArray(R.array.colorNames);
        displayColor.setText(names[position]);
        background.setBackgroundColor(Color.parseColor(color));
    }
我已经尝试在画布片段上覆盖onAttach和OnDetch,并添加了一个消息侦听器,但仍然会出现错误。如果能给我指引正确的方向,我将不胜感激

错误

java.lang.IllegalStateException:Fragment CanvasFragment{69925d5(240edefb-318c-4983-bd15-cf45142e849a)id=0x7f080047}未附加到上下文。
调用时

getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.canvas_fragment, canvas)
    .addToBackStack(null)
    .commit();
您正在使用
commit()
。根据:

安排此事务的提交提交不会立即发生它将被安排为下一次线程准备就绪时在主线程上完成的工作

因此,当您直接在后面调用
canvas.setColor(color,position)
时,片段不会被附加,并且它还没有与之关联的
上下文

如果希望立即添加片段,则需要使用,这将强制事务立即发生。这样可以确保在调用
setColor
方法之前完成:

getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.canvas_fragment, canvas)
    .addToBackStack(null)
    .commitNow();

你说上下文缺失是什么意思?对不起,这不是最好的术语。以下是错误:java.lang.IllegalStateException:Fragment CanvasFragment{69925d5(240edefb-318c-4983-bd15-cf45142e849a)id=0x7f080047}未附加到上下文。调用newInstance()方法时,是否尝试将活动束而不是null作为参数?相同的错误。我最初不需要newInstance()变量。我补充说,因为教授在课堂上编写的源代码需要捆绑包。删除canvas.setColor(颜色、位置)不会生成错误。