我有此代码可以在活动中打开片段。我想做的是称呼带有名称为"书"的片段。
Intent intent = new Intent(this, Dashboard_Admin.class);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.putExtra("FragmentBooking", "book");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
在带有片段的活动中,我有此代码
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard_admin);
Bundle extra = getIntent().getExtras();
Toast.makeText(this, "test!!!!!!!!!!!!!!!!!!!!", Toast.LENGTH_SHORT).show();
if (extra!=null){
String idFrg = extra.getString("FragmentBooking");
Toast.makeText(this, "Hello: "+idFrg, Toast.LENGTH_SHORT).show();
if (idFrg.equals("book")){
Log.d(TAG_SUCCESS, "Test");
Fragment fragment = null;
Class fragmentClass = null;
fragmentClass = FragmentBookingKendaraan.class;
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContentAdmin, fragment).commit();
}
}
}
但是,捆绑包总是无效的。这里怎么了?谢谢
尝试以下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard_admin);
if (getIntent().getStringExtra("FragmentBooking")!=null){
if (getIntent().getStringExtra("FragmentBooking").equals("book")){
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager
.beginTransaction()
.replace(R.id.flContentAdmin, new FragmentBookingKendaraan())
.commit();
}
}}
要从活动中调用您的片段,我有一种常见的方法。
public void showFragment(Fragment fragment, String back_stack_name, boolean isAddToBackStack) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.container, fragment);
if (isAddToBackStack) {
transaction.addToBackStack(back_stack_name);
}
transaction.commit();
}
通过通过捆绑包来调用活动的片段。(在ongreate(((
中写下此代码Classname classname = new Classname();
Bundle bundle = new Bundle();
bundle.putBundle("key", "value");
classname.setArguments(bundle);
showFragment(classname, fragment_name, true);
在fragment
Bundle mBundle = getArguments();
if (mBundle != null) {
String variable = mBundle.getString("key");
}
如果您不想将捆绑包到片段
Classname classname = new Classname();
showFragment(classname, fragment_name, true);