Articles of android dialogfragment

为何在销毁Activity时调用DialogFragment.onCreateView?

我正在使用android支持库v4修订版11并不时,我看到下面的堆栈跟踪; 我怀疑它是由于从最近发布而发生的,因此我试图访问的模型为空。 无论如何,这个跟踪让我想知道为什么在活动被销毁时调用onCreateView,以及处理这种情况的最佳方法是什么? java.lang.NullPointerException at com.example.dialogs.ExampleDialogFragment.onCreateView(ExampleDialogFragment.java:53) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070) at android.support.v4.app.FragmentManagerImpl.dispatchReallyStop(FragmentManager.java:1888) at android.support.v4.app.FragmentActivity.onReallyStop(FragmentActivity.java:787) at android.support.v4.app.FragmentActivity.doReallyStop(FragmentActivity.java:764) at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:322) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3642) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3673) at android.app.ActivityThread.access$2900(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main(Native Method) 崩溃后,后台堆栈中的活动恢复,我会检查模型是否在活动onResume() , onStart()和onCreate(Bundle savedInstanceState) 。 如果模型无效,我使用FLAG_ACTIVITY_NO_HISTORY从那里开始另一个活动,调用finish()并return; 例如 […]

在状态栏上全屏显示bottomSheetDialog

我最近使用了android.support.design.widget.BottomSheetDialogFragment。 我想做一些类似于谷歌联系人应用程序的东西,它的BottomSheet可以覆盖工具栏和状态栏。 但是,当我使用BottomSheetDialogFragment实现它时,结果如下: 如您所见,活动的工具栏仍然可见。 这是我的BottomSheetDialogFragment代码: public class KeyDetailFragment extends BottomSheetDialogFragment { private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { if (newState == BottomSheetBehavior.STATE_HIDDEN) { dismiss(); } } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { } }; @Override public void setupDialog(Dialog dialog, int style) { super.setupDialog(dialog, […]

将片段添加到对话框中

我想在对话框中添加一个片段(它可以是DialogFragment或常规Dialog)。 我怎么做? 这是我的DialogFragment: public class MyDialogFragment extends DialogFragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { MyDialogFragment2 dialog = new MyDialogFragment2(); View v = inflater.inflate(R.layout.news_articles, container, false); getActivity().getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, dialog).commit(); return v; } } 这是news_article.xml: 这是我的主要活动: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { MyDialogFragment […]

Android片段显示为dialogfragment或通常的片段

我想要实现的是在平板电脑上显示一个片段,它显示为DialogFragment ,而在智能手机上,它将显示为常规片段。 我知道已有类似的post ,但我无法做到这一点 – 将样式应用于片段。 要自上而下显示,MainActivity.java: public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_next) { decideToNext(); return true; } return super.onOptionsItemSelected(item); } private void decideToNext() { […]

在DialogFragment中不会调用onContextItemSelected

我有一个显示项目列表的对话框,我需要能够编辑/删除此列表中的项目,因此我将上下文菜单放入其中,因此当用户长按项目时,他们可以选择他们想要做的事情(编辑或删除项目)。 问题是当选择上下文菜单中的项时, onContextItemSelected永远不会被调用。 我查看是否可能创建对话框片段的活动正在获取回调,但这不是为什么它没有被调用? 你不能在对话框中做一个上下文菜单吗? public class TypesDialogList extends DialogFragment implements LoaderManager.LoaderCallbacks,OnItemClickListener,OnCreateContextMenuListener{ ListView lv; SimpleCursorAdapter mAdapter; private int EDIT_TYPE = 1; private int DELETE_TYPE = 2; OnEditType mType; public Dialog onCreateDialog(Bundle state){ final View v = getActivity().getLayoutInflater().inflate(R.layout.layer_dialog_layout, null, false); lv = (ListView)v.findViewById(R.id.listView1); lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); lv.setOnItemClickListener(this); lv.setOnCreateContextMenuListener(this); return new AlertDialog.Builder(getActivity()).setView(v).setPositiveButton(“Add Type”, new OnClickListener(){ public void onClick(DialogInterface dialog, […]

管理DialogFragment的活动

如何从创建它的活动中的DialogFragment调用finish()和其他非静态方法? 我试过从DialogFragment中的OnClickLisener传递消息,但无济于事。 我有一个非常简单的应用程序,包括MainActivity和DialogFragment: public class MainActivity extends Activity { @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity); showDialog(); } public void showDialog() { DialogFragment newFragment = new ConfirmDialog(); newFragment.show(getFragmentManager(), “dialog”); } 对话再次非常简单: public class ConfirmDialog extends DialogFragment { @Override public AlertDialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder […]

为什么使用newInstance for DialogFragment而不是构造函数?

查看DialogFragment的文档 ,可以看到静态newInstance方法来初始化新的警报对话框片段。 我的问题是,为什么不使用构造函数来这样做,像这样: public MyAlertDialogFragment(int title) { Bundle args = new Bundle(); args.putInt(“title”, title); setArguments(args); } 这不完全一样,还是以某种方式不同? 什么是最好的方法, 为什么 ?

如何在android的屏幕底部实现自定义对话框

哪个组件我必须选择在底部实现自定义对话框,如下图所示? 我应该选择alertdialog,popupwindow还是fragmentdialog?

添加警报窗口后,DialogFragment未显示

我有一个函数,当触发时,成功显示带有以下代码的DialogFragment DialogFragment DialogFragment dialog; View dialogView; Context activityContext; … dialog = new DialogFragment(){ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { dialogView = getActivity().getLayoutInflater().inflate(R.layout.customView, null); … AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(dialogView); return builder.create(); } }; dialog.show(activityContext.getSupportFragmentManager() , “MyDialog”); 问题是,在我添加一个带有以下代码的系统警报窗口后,DialogFragment不再显示,但是如果我传递给另一个应用程序,当我的应用程序最小化时,我可以看到DialogFragment,同时它减小了它的大小 系统警报窗口 WindowManager mWindowManager; WindowManager.LayoutParams params; … mWindowManager = (WindowManager)activityContext.getSystemService(Context.WINDOW_SERVICE); params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, […]

是否可以从PreferenceActivity中的首选项启动DialogFragment?

我正在转换我的应用程序以使用v4兼容包和片段。 到目前为止我做得很好,但我需要从PreferenceActivity中的PreferenceActivity选项单击启动DialogFragment。 由于兼容性库中没有PreferenceFragment,因此我坚持使用PreferenceActivity 。 是否有可能获得对片段管理器的引用并调用DialogFragment或者如果我需要来自首选项的对话框,我是否只需继续使用旧对话框?