我试图用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();
}
}
答案 0 :(得分:1)
在隐藏fragmentB
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();错误告诉你那里没有片段