尝试写入空对象引用上的字段"int android.app.Fragment.mNextAnim"



im 尝试使用片段 - 使用 if 和 else 更改片段。当我尝试运行程序时,我遇到了此错误:

"尝试写入空对象引用上的字段'int android.app.Fragment.mNextAnim' "

搜索答案,我看到Mybe的sulotion是导入Fragmet.support.v4.app.Fragment

所以试过了,我无法更改为此导入我该怎么办或它其他的治疗?

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements  View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if(isInSingleFrragment()){
        FragmentManager fm = getFragmentManager();
        Fragment fragmentB = fm.findFragmentById(R.id.FragmetB);
        FragmentTransaction ft=fm.beginTransaction();
        ft.hide(fragmentB);
        ft.commit();
        Button switchbutton = (Button)findViewById(R.id.switchbutton);
        switchbutton.setOnClickListener(this);
    }
}
private boolean isInSingleFrragment() {
    View layout = findViewById(R.id.singleLayout);
    if (layout != null) {
        return true;
    } else {
        return false;
    }
}
@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.switchbutton:
            switchFragments();
            break;
    }
}
private void switchFragments() {
    FragmentManager fm = getFragmentManager();
    Fragment fragmentA = fm.findFragmentById(R.id.FragmetA);
    Fragment fragmentB = fm.findFragmentById(R.id.FragmetB);
    FragmentTransaction ft = fm.beginTransaction();
    if(fragmentA.isVisible()){
        ft.hide(fragmentA);
        ft.show(fragmentB);
    }else {
        ft.hide(fragmentB);
        ft.show(fragmentA);
    }
    ft.commit();
}
}

在隐藏fragmentB之前添加对 null 的检查

if(isInSingleFrragment()){
    FragmentManager fm = getFragmentManager();
    Fragment fragmentB = fm.findFragmentById(R.id.FragmetB);
    FragmentTransaction ft = fm.beginTransaction();
    if (fragmentB != null) ft.hide(fragmentB);  // check != null
    ft.commit();
    ...
}

当你使用hide时,你必须有一个片段,用.add().hide();错误告诉你有ara no fragment

相关内容

最新更新