单击替换片段
Replace Fragment on click
我想在单击 FloatingActionButton
时用新片段替换当前片段。我用 fragmentReplace 尝试过,但我的应用程序一直崩溃。
我是不是漏了什么?
代码:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
android.app.Fragment someFrag = new NewEventActivity();
replaceFragment(someFrag);
//Snackbar.make(view, "Hallo du heimlich pupsende :P", Snackbar.LENGTH_LONG)
// .setAction("Action", null).show();
}
});
}
public void replaceFragment(android.app.Fragment someFrag){
android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.newEvent, someFrag);
transaction.addToBackStack(null);
transaction.commit();
}
片段:
public class NewEventActivity extends android.app.Fragment {
LayoutInflater inflater;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.new_event_fragment, container, false);
return rootView;
}
}
Logcat
Process: com.example.danny.myapplication, PID: 3123
java.lang.IllegalArgumentException: No view found for id 0x7f0c0082
(com.example.danny.myapplication:id/newEvent) for fragment
NewEventActivity{bd7d3d #2 id=0x7f0c0082}
at
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1059)
at
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at
android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
at
android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at
android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:517)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
试试这个,
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.main_activity,
new YourNewFragment()).addToBackStack(YourPreviousFragment.class.getName())
.commit();
您的视图 R.id.newEvent 应该是您在 activity.
的 setContentView() 方法中定义的子布局
我想在单击 FloatingActionButton
时用新片段替换当前片段。我用 fragmentReplace 尝试过,但我的应用程序一直崩溃。
我是不是漏了什么?
代码:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
android.app.Fragment someFrag = new NewEventActivity();
replaceFragment(someFrag);
//Snackbar.make(view, "Hallo du heimlich pupsende :P", Snackbar.LENGTH_LONG)
// .setAction("Action", null).show();
}
});
}
public void replaceFragment(android.app.Fragment someFrag){
android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.newEvent, someFrag);
transaction.addToBackStack(null);
transaction.commit();
}
片段:
public class NewEventActivity extends android.app.Fragment {
LayoutInflater inflater;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.new_event_fragment, container, false);
return rootView;
}
}
Logcat
Process: com.example.danny.myapplication, PID: 3123 java.lang.IllegalArgumentException: No view found for id 0x7f0c0082 (com.example.danny.myapplication:id/newEvent) for fragment NewEventActivity{bd7d3d #2 id=0x7f0c0082} at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1059) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:517) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
试试这个,
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.main_activity,
new YourNewFragment()).addToBackStack(YourPreviousFragment.class.getName())
.commit();
您的视图 R.id.newEvent 应该是您在 activity.
的 setContentView() 方法中定义的子布局