我从一些用户那里得到了这个例外:
java.lang.IllegalStateException:之后无法执行此操作 onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManagerImpl.java:1500) 在 android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManagerImpl.java:1518)at at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:634) 在 android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:613) 在 android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:201) 在 android.support.v4.app.DialogFragment.dismiss(DialogFragment.java:167) 在com.myapp.myapp.HelpDialog $ 2.onClick(HelpDialog.java:228)at android.view.View.performClick(View.java:5201)at android.view.View $ PerformClick.run(View.java:21163)at android.os.Handler.handleCallback(Handler.java:746)at android.os.Handler.dispatchMessage(Handler.java:95)at android.os.Looper.loop(Looper.java:148)at android.app.ActivityThread.main(ActivityThread.java:5443)at java.lang.reflect.Method.invoke(Method.java)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:728) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
导致此异常的调用位于DialogFragment onCreateView()方法中:
...
Button btn;
btn = (Button)v.findViewById( R.id.close_btn );
btn.setOnClickListener( new View.OnClickListener()
{
@Override
public void onClick( View view )
{
dismiss();
}
});
解雇导致状态丢失,因为操作是在onSaveInstanceState()之后完成的。在调用onSaveInstanceState()后,用户如何单击“关闭”按钮?
修改即可。 DialogFragment里面有一个viewpager。我将只发布dialogfragment的代码而不是viewpager适配器或fragmenttabs的代码:
/**
*
*/
public class HelpDialog extends DialogFragment
{
final static String DIALOG_TAG = "help_dialog";
ViewPager mPager = null;
/**
*
*/
public HelpDialog()
{
CLog.i( "HelpDialog.HelpDialog()", "Constructor called" );
}
/**
* Create a new instance of WelcomeDialog.
*/
static HelpDialog newInstance()
{
HelpDialog d = new HelpDialog();
return d;
}
/**
*
*/
static boolean showNewInstance( FragmentActivity activity )
{
HelpDialog d = HelpDialog.newInstance();
if ( d != null )
{
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
Fragment prev = activity.getSupportFragmentManager().findFragmentByTag( HelpDialog.DIALOG_TAG );
if (prev != null)
{
ft.remove( prev );
}
// Create and show the dialog.
d.show( ft, HelpDialog.DIALOG_TAG );
return true;
}
return false;
}
@Override
public void onCreate( Bundle savedInstanceState )
{
super.onCreate(savedInstanceState);
CLog.i("HelpDialog.onCreate()", "" );
int style = DialogFragment.STYLE_NO_TITLE;
int theme = getTheme();
setStyle( style, theme );
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
CLog.i("HelpDialog.onCreateDialog()", "" );
return super.onCreateDialog( savedInstanceState );
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
CLog.i("HelpDialog.onCreateView()", "" );
final View v = inflater.inflate( R.layout.help_dialog, container, false );
DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenWidth = displaymetrics.widthPixels;
int screenHeight = displaymetrics.heightPixels;
int min_width = (displaymetrics.widthPixels * 70) / 100;
int min_height = (displaymetrics.heightPixels * 70) / 100;
v.setMinimumWidth( min_width );
//v.setMinimumHeight(min_height);
CLog.i( "HelpDialog.onCreateView()", "screenWidth " + screenWidth + " min_width " + min_width );
// Locate ViewPager in activity_main.xml
mPager = (ViewPager) v.findViewById( R.id.help_dlg_pager );
// Activate Fragment Manager
FragmentManager fm = this.getChildFragmentManager();//getActivity().getSupportFragmentManager();
// Capture ViewPager page swipes
ViewPager.SimpleOnPageChangeListener viewPagerListener = new ViewPager.SimpleOnPageChangeListener()
{
@Override
public void onPageSelected(int position)
{
super.onPageSelected(position);
}
};
mPager.setOnPageChangeListener( viewPagerListener );
// Locate the adapter class called ViewPagerAdapter.java
HelpDlgViewPagerAdapter viewpageradapter = new HelpDlgViewPagerAdapter(fm);
// Set the View Pager Adapter into ViewPager
mPager.setAdapter(viewpageradapter);
//mPager.setPageTransformer( true, new DepthPageTransformer() );
mPager.setPageTransformer( true, new ZoomOutPageTransformer() );
//Bind the title indicator to the adapter
CirclePageIndicator mIndicator = (CirclePageIndicator)v.findViewById( R.id.help_dlg_indicator );
mIndicator.setViewPager( mPager );
Button btn;
btn = (Button)v.findViewById( R.id.close_btn );
btn.setOnClickListener( new View.OnClickListener()
{
@Override
public void onClick( View view )
{
CLog.i( "HelpDialog", "onClick() - dismissing" );
dismissAllowingStateLoss();
}
});
getDialog().getWindow().setBackgroundDrawableResource( R.color.transparent );//translucent_black );
getDialog().getWindow().clearFlags( WindowManager.LayoutParams.FLAG_DIM_BEHIND );
getDialog().setCanceledOnTouchOutside( false );
return v;
}
////
@Override
public void onAttach ( Activity activity )
{
super.onAttach( activity );
CLog.i("HelpDialog.onAttach()", "" );
}
@Override
public void onActivityCreated (Bundle savedInstanceState)
{
super.onActivityCreated( savedInstanceState );
CLog.i("HelpDialog.onActivityCreated()", "" );
}
@Override
public void onViewStateRestored (Bundle savedInstanceState)
{
super.onViewStateRestored(savedInstanceState);
CLog.i("HelpDialog.onViewStateRestored()", "" );
}
@Override
public void onStart ()
{
super.onStart();
CLog.i("HelpDialog.onStart()", "" );
}
@Override
public void onStop ()
{
super.onStop();
CLog.i("HelpDialog.onStop()", "" );
}
@Override
public void onResume()
{
super.onResume();
CLog.i("HelpDialog.onResume()", "" );
}
@Override
public void onPause()
{
super.onPause();
CLog.i("HelpDialog.onPause()", "" );
}
@Override
public void onDestroyView()
{
super.onDestroyView();
CLog.i("HelpDialog.onDestroyView()", "" );
}
@Override
public void onDestroy ()
{
super.onDestroy();
CLog.i("HelpDialog.onDestroy()", "" );
}
@Override
public void onDetach ()
{
super.onDetach();
CLog.i("HelpDialog.onDetach()", "" );
}
}
答案 0 :(得分:0)
static boolean showNewInstance( FragmentActivity activity )
{
HelpDialog d = HelpDialog.newInstance();
if ( d != null )
{
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
Fragment prev = activity.getSupportFragmentManager().findFragmentByTag( HelpDialog.DIALOG_TAG );
if (prev != null)
{
ft.remove( prev );
}
// Create and show the dialog.
d.show( ft, HelpDialog.DIALOG_TAG );
return true;
}
return false;
}
您忘记提交交易。在ft.commit();
ft.remove( prev );