android – 在片段中实现对话框时添加内容之前必须请求窗口功能

前端之家收集整理的这篇文章主要介绍了android – 在片段中实现对话框时添加内容之前必须请求窗口功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个片段,我需要在其中显示自定义对话框.

请查看下面的代码.

  1. public class MyFragment extends Fragment{
  2.  
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. }
  7.  
  8. @Override
  9. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  10. View rootView = inflater.inflate(R.layout.send_layout,container,false);
  11. TextView txtView = (TextView) rootView.findViewById(R.id.tv);
  12.  
  13. txtView.setOnClickListener(new View.OnClickListener() {
  14. @Override
  15. public void onClick(View v) {
  16. openDialog();
  17. }
  18. });
  19. return rootView;
  20. }
  21. public void openDialog(){
  22. AppCompatDialog dialog = new AppCompatDialog(getContext(),R.style.package_types__dialog);
  23. dialog.setContentView(R.layout.package_types_dialog);
  24. dialog.show();
  25. }
  26. }

删除行时:

  1. dialog.setContentView(R.layout.package_types_dialog);

没有错误,但如果我使用相同的以下错误抛出:

  1. FATAL EXCEPTION: main
  2. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: Process: in.edelworks.pickedup,PID: 23866
  3. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: android.util.AndroidRuntimeException: Window feature must be requested before adding content
  4. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV7.throwFeatureRequestIfSubDecorInstalled(AppCompatDelegateImplV7.java:1584)
  5. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV7.requestWindowFeature(AppCompatDelegateImplV7.java:509)
  6. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplBase.onCreate(AppCompatDelegateImplBase.java:117)
  7. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV7.onCreate(AppCompatDelegateImplV7.java:148)
  8. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDialog.onCreate(AppCompatDialog.java:60)
  9. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.app.Dialog.dispatchOnCreate(Dialog.java:361)
  10. 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.app.Dialog.show(Dialog.java:262)

解决方法

我已经为你的情况实施并尝试了很多替代方案,它的工作非常好,所以我没有机会审查你的错误.但我可以建议你用AlertDialog.Builder替换AppCompatDialog,这是一个android.support.v7.app类.

替换此代码

  1. public void openDialog(){
  2. AppCompatDialog dialog = new AppCompatDialog(getContext(),R.style.package_types__dialog);
  3. dialog.setContentView(R.layout.package_types_dialog);
  4. dialog.show();
  5. }

  1. public void openDialog(){
  2. AlertDialog.Builder dialog = new AlertDialog.Builder(getContext(),R.style.package_types__dialog);
  3. dialog.setView(R.layout.package_types_dialog);
  4. }

注意 :

如果您有任何处理对话事件的类,则扩展android.support.v4.app.DialogFragment的DialogFragment.并且不要忘记覆盖onCreateDialog方法.完整的课程看起来像这样

  1. import android.os.Bundle;
  2. import android.support.v4.app.DialogFragment;
  3.  
  4. /**
  5. * Created by Shreekrishna on 2/29/2016.
  6. */
  7. public class PackageTypesDialog extends DialogFragment {
  8.  
  9. @Override
  10. public Dialog onCreateDialog(Bundle savedInstanceState) {
  11. return super.onCreateDialog(savedInstanceState);
  12. }
  13. }

这可能会解决您的问题!

猜你在找的Android相关文章