我有一个片段,我需要在其中显示自定义对话框.
请查看下面的代码.
public class MyFragment extends Fragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.send_layout,container,false);
TextView txtView = (TextView) rootView.findViewById(R.id.tv);
txtView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openDialog();
}
});
return rootView;
}
public void openDialog(){
AppCompatDialog dialog = new AppCompatDialog(getContext(),R.style.package_types__dialog);
dialog.setContentView(R.layout.package_types_dialog);
dialog.show();
}
}
删除行时:
dialog.setContentView(R.layout.package_types_dialog);
没有错误,但如果我使用相同的以下错误抛出:
FATAL EXCEPTION: main 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: Process: in.edelworks.pickedup,PID: 23866 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: android.util.AndroidRuntimeException: Window feature must be requested before adding content 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV7.throwFeatureRequestIfSubDecorInstalled(AppCompatDelegateImplV7.java:1584) 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV7.requestwindowFeature(AppCompatDelegateImplV7.java:509) 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplBase.onCreate(AppCompatDelegateImplBase.java:117) 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV7.onCreate(AppCompatDelegateImplV7.java:148) 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.support.v7.app.AppCompatDialog.onCreate(AppCompatDialog.java:60) 10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: at android.app.Dialog.dispatchOnCreate(Dialog.java:361) 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类.
替换此代码
public void openDialog(){
AppCompatDialog dialog = new AppCompatDialog(getContext(),R.style.package_types__dialog);
dialog.setContentView(R.layout.package_types_dialog);
dialog.show();
}
同
public void openDialog(){
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext(),R.style.package_types__dialog);
dialog.setView(R.layout.package_types_dialog);
}
注意 :
如果您有任何处理对话事件的类,则扩展android.support.v4.app.DialogFragment的DialogFragment.并且不要忘记覆盖onCreateDialog方法.完整的课程看起来像这样
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
/**
* Created by Shreekrishna on 2/29/2016.
*/
public class PackageTypesDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return super.onCreateDialog(savedInstanceState);
}
}
这可能会解决您的问题!