尝试写入字段' int android.app.Fragment.mNextAnim'在null对象引用上

时间:2016-03-14 18:38:24

标签: android-fragments

我试图用if和else来使用片段改变片段。 当我试图运行程序时,我遇到了这个错误:

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

我搜索答案,我看到mybe the 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();
}
}

2 个答案:

答案 0 :(得分:1)

在隐藏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();
    ...
}

答案 1 :(得分:0)

当你使用hide时,你必须有一个片段,使用.add()。hide();错误告诉你那里没有片段