且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何解决requestFeature()必须在Android中添加内容之前被调用

更新时间:2023-02-14 19:40:36

问题是由 MaterialDesignLibrary 。由于以下行对话框类:

  @覆盖
保护无效的onCreate(捆绑savedInstanceState){
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 ....
}

在这里 requestWindowFeature 在调用后调用的setContentView 法活动。

要解决这个问题,您应该删除 requestWindowFeature(Window.FEATURE_NO_TITLE); 对话行类库

I am creating an application that consists of the simple and small registration form pop up in an alert dialog when we click a button. But it was showing an error called android.util.AndroidRuntimeException: requestFeature() must be called before adding content please make it solve

Here i also used the SQLite databse This is my activity

package com.example.androidmaterial;

import com.gc.materialdesign.views.ButtonFlat;
import com.gc.materialdesign.views.ButtonFloat;
import com.gc.materialdesign.views.ButtonRectangle;
import com.gc.materialdesign.widgets.Dialog;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Sample extends Activity
{
    ButtonFloat keyboard;
    ButtonRectangle hide_keyboard;
    LoginDataBaseAdapter login_database_adapter;
    ButtonFlat database;
    EditText name;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_sample);
        login_database_adapter = new LoginDataBaseAdapter(Sample.this);
        login_database_adapter = login_database_adapter.open();

        database = (ButtonFlat)findViewById(R.id.buttonflat);
        database.setOnClickListener(new View.OnClickListener() 
        {

            @Override
            public void onClick(View v) 
            {
                Dialog dialog_signup = new Dialog(Sample.this,"Registration","Please Fill all the details");
                dialog_signup.setContentView(R.layout.activity_signup);
                final EditText username = (EditText)dialog_signup.findViewById(R.id.editText1);
                final EditText password =  (EditText)dialog_signup.findViewById(R.id.editText2);
                final EditText confirmpass = (EditText)dialog_signup.findViewById(R.id.editText3);
                final EditText name = (EditText)dialog_signup.findViewById(R.id.editText4);
                final ButtonFlat register  = (ButtonFlat)dialog_signup.findViewById(R.id.buttonflat);
                register.setOnClickListener(new View.OnClickListener() 
                {

                    @Override
                    public void onClick(View v) 
                    {
                        String user_name = name.getText().toString(); 
                        String mqs_user_name = username.getText().toString();
                        String mqs_password = password.getText().toString();
                        String mqs_confirmpass =  confirmpass.getText().toString();

                        if(mqs_user_name.equals("")||mqs_password.equals("")||mqs_confirmpass.equals(""))
                        {
                            Toast.makeText(Sample.this, "Some fields are empty please enter all the fields",Toast.LENGTH_LONG).show();
                        }
                        if(mqs_password!=mqs_confirmpass)
                        {
                            Toast.makeText(Sample.this, "Passwords did not match",Toast.LENGTH_LONG).show();
                        }
                        else
                        {

                            login_database_adapter.insertEntry(mqs_user_name, mqs_password);
                            Toast.makeText(Sample.this, "Account Successfully created"+" "+user_name,Toast.LENGTH_LONG).show();
                        }


                    }
                });
                dialog_signup.show();

            }
        });


        keyboard = (ButtonFloat)findViewById(R.id.buttonFloat);
        hide_keyboard = (ButtonRectangle)findViewById(R.id.button_2);
        hide_keyboard.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) 
            {try{
                InputMethodManager imm_2 = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm_2.hideSoftInputFromInputMethod(getCurrentFocus().getWindowToken(),0);
            }
            catch(Exception e)
            {
                Toast.makeText(Sample.this, e.getMessage(), Toast.LENGTH_LONG).show();
            }

            }
        });
        keyboard.requestFocus();
        keyboard.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Dialog dialog = new Dialog(Sample.this, "MedeQuip", "Hello...This is a sample dialog box check");
                dialog.setOnAcceptButtonClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Toast.makeText(Sample.this, "Click accept button", 1).show();
                    }
                });
                dialog.setOnCancelButtonClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Toast.makeText(Sample.this, "Click cancel button", 1).show();
                    }
                });
                dialog.show();
            }
        });

    }
@Override
protected void onDestroy() {


    login_database_adapter.close();
    super.onDestroy();
}
}

EDIT: her is the code i use

protected void onCreate(Bundle savedInstanceState){ 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sample); 
    login_database_adapter = new LoginDataBaseAdapter(Sample.this);  
    login_database_adapter = login_database_adapter.open();
}

This is my Logcat

02-02 15:28:32.106: E/AndroidRuntime(19240): FATAL EXCEPTION: main
02-02 15:28:32.106: E/AndroidRuntime(19240): Process: com.example.androidmaterial, PID: 19240
02-02 15:28:32.106: E/AndroidRuntime(19240): android.util.AndroidRuntimeException: requestFeature() must be called before adding content
02-02 15:28:32.106: E/AndroidRuntime(19240):    at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:264)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.app.Dialog.requestWindowFeature(Dialog.java:1041)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at com.gc.materialdesign.widgets.Dialog.onCreate(Dialog.java:56)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.app.Dialog.dispatchOnCreate(Dialog.java:361)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.app.Dialog.show(Dialog.java:262)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at com.gc.materialdesign.widgets.Dialog.show(Dialog.java:111)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at com.example.androidmaterial.Sample$1.onClick(Sample.java:81)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at com.gc.materialdesign.views.ButtonFlat.onDraw(ButtonFlat.java:83)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.draw(View.java:14728)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13588)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13635)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13509)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13635)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13509)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13635)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13509)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13635)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13509)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.View.getDisplayList(View.java:13635)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1627)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1506)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2722)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2587)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2210)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1189)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6223)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.Choreographer.doCallbacks(Choreographer.java:591)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.Choreographer.doFrame(Choreographer.java:560)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.os.Handler.handleCallback(Handler.java:808)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.os.Handler.dispatchMessage(Handler.java:103)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.os.Looper.loop(Looper.java:193)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at android.app.ActivityThread.main(ActivityThread.java:5292)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at java.lang.reflect.Method.invokeNative(Native Method)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at java.lang.reflect.Method.invoke(Method.java:515)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
02-02 15:28:32.106: E/AndroidRuntime(19240):    at dalvik.system.NativeStart.main(Native Method)

Problem is caused by MaterialDesignLibrary.due to following line in Dialog class:

@Override
protected void onCreate(Bundle savedInstanceState) {
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 ....
}

here requestWindowFeature is called after calling setContentView method in Activity.

To fix this issue you should remove requestWindowFeature(Window.FEATURE_NO_TITLE); line from Dialog class of library