相关疑难解决方法(0)

android.util.AndroidRuntimeException:在添加内容之前必须调用requestFeature()

我收到了这个android.util.AndroidRuntimeException: requestFeature() must be called before adding content错误.正如您在下面的代码中看到的那样,该requestWindowFeature(Window.FEATURE_NO_TITLE);行在代码行之前setContentView(R.layout.mainmenu);.这个onCreate()代码在我的每一项活动中都是相同的格式,直到现在我才从未遇到过麻烦.自从我更新到ADT 22以来,到处都出现了很多随机错误.我已经排除了很多这些错误,这是我最新的错误.

我该怎么做才能解决这个错误?

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.mainmenu);
Run Code Online (Sandbox Code Playgroud)

logcat的

05-31 04:20:43.121: E/AndroidRuntime(14559): FATAL EXCEPTION: main
05-31 04:20:43.121: E/AndroidRuntime(14559): java.lang.RuntimeException: Unable to start activity ComponentInfo{matt.lyons.bibletrivia.lite/matt.lyons.bibletrivia.lite.MainMenu}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.os.Looper.loop(Looper.java:137)
05-31 …
Run Code Online (Sandbox Code Playgroud)

java android

77
推荐指数
4
解决办法
9万
查看次数

如何防止自定义 DialogFragment 在显示时隐藏键盘

有 2 种方法可以通过DialogFragment.

  1. 使用覆盖onCreateDialog并返回对话框AlertDialog.Builder
  2. 覆盖onCreateView

我们注意到,如果我们覆盖onCreateDialog,之前显示的软键盘将不会被隐藏。

但是,如果我们覆盖onCreateView之前显示的软键盘将被隐藏。

onCreateDialog不会隐藏软键盘

在此输入图像描述


onCreateView将隐藏软键盘

在此输入图像描述


隐藏软键盘不是我们想要的行为。我们希望软键盘保持原样。

onCreateDialog但是,由于DialogFragment 中提到的 ViewPager 限制 - IllegalStateException: Fragment does not have a view ,我们无法使用该方法。简而言之,如果您需要ViewPager在对话框中很好地工作,则无法使用onCreateDialog.

如果我们使用onCreateView,我们可以实现除了“不隐藏软键盘”之外的一切。

您知道为什么覆盖onCreateView创建自定义对话框会隐藏键盘吗?我们怎样才能防止这种行为呢?


代码

我的对话框风格是:

<style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

ColorDialogFragment.java

public class ColorDialogFragment extends DialogFragment {
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ColorFragmentPagerAdapter colorFragmentPagerAdapter;

    public static ColorDialogFragment newInstance() {
        ColorDialogFragment colorDialogFragment …
Run Code Online (Sandbox Code Playgroud)

android android-softkeyboard android-dialogfragment

6
推荐指数
1
解决办法
1484
查看次数

包含片段的AppCompat样式对话框

我想要一个AppCompat风格的对话框 - 背景,标题,按钮位置,按钮色调等 - 包含片段.

使用自定义DialogFragment onCreateDialog()可以返回一个AppCompatDialog,然后在onCreateView()新的布局中可以膨胀并childFragmentManager可以用于用Fragment替换占位符视图.但是生成的对话框是一个没有按钮的空框.可以手动将它们添加到对话框的布局中,但它们不会从AppCompat中获得样式.

如果您使目标片段扩展,则同样适用DialogFragment.

要获得AppCompat按钮,您可以使用AlertDialog.Builder.setView()来设置布局,但是我找不到将Fragment设置为内容的方法.如果你从那时开始尝试childFragmentManager.beginTransaction().replace(),onCreateDialog()你会得到:

 java.lang.IllegalStateException: Fragment does not have a view
Run Code Online (Sandbox Code Playgroud)

这似乎是因为,即使在使用builder.setView()dialog.create() 随后dialog.setView(), onCreateView()并且getView()总是返回null.

这里的第二个答案似乎非常全面地涵盖了这一点,但没有提出有利的解决方案:https://stackoverflow.com/a/21418952/2645845

如果您覆盖onCreateView()getView()返回您膨胀的视图,那么您会得到:

 android.util.AndroidRuntimeException: Window feature must be requested before adding content
    at android.support.v7.app.AppCompatDelegateImplV7.throwFeatureRequestIfSubDecorInstalled(AppCompatDelegateImplV7.java:1479)
Run Code Online (Sandbox Code Playgroud)

android android-appcompat android-fragments android-dialog appcompatdialog

5
推荐指数
0
解决办法
702
查看次数