2013-06-21 13 views
34

DialogFragment ile ilgili bir sorunum var. Bu yüzden, görünümümü oluşturmak için, android bloğunda açıklanan yöntemi kullanıyorum. BenDialogFragment ve klavyeyi göstermek için zorlama

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder 
      .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        callback.onYesConnectClick(edit.getText().toString()); 
       } 
      }) 
      .setNegativeButton(R.string.refuse, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        callback.onNoConnectClick(); 
       } 
      }); 

    return builder.create(); 
} 

yorum yaparsanız: Burada onCreateView() kullanırsanız, çalışır ancak bir AlterDialog oluşturmak ve bunu yapmak için, aşağıdaki kodu var istiyorum benim DialogFragment

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final View myLayout = inflater.inflate(R.layout.dialog_connect, null); 

    edit = (EditText) myLayout.findViewById(R.id.password_edit); 
    edit.requestFocus(); 
    getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

    return myLayout; 
} 

olduğunu onCreateView() kodu, uygulama çalışır ancak klavyenin gösterilmesini zorlayamıyorum ve eğer onCreateView() 'un uncomment'ını yaparsam kazaya uğraşırım. İşte Yığın izleme:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test/com.test.ProfileActivity_}: android.util.AndroidRuntimeException:  requestFeature() must be called before adding content 
AndroidRuntime at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2312) 
AndroidRuntime at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2362) 
AndroidRuntime at android.app.ActivityThread.access$600(ActivityThread.java:156) 
AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1250) 
AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99) 
AndroidRuntime at android.os.Looper.loop(Looper.java:137) 
AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:5229) 
AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method) 
AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:525) 
AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799) 
AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
AndroidRuntime at dalvik.system.NativeStart.main(Native Method) 
AndroidRuntime Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 

Benim soru ==> Ben AlertDialog kullanmak ve iletişim göründüğünde klavyeyi gösterebilir mi? senin dialogfragment içinde

cevap

95

geçersiz kılma onActivityCreated ve benim için çalışmıyor orada

+3

wtf?! Çok zaman aradım ve çözüm çok kolaydı! Yine de anlamadığım bir şey var. Ben android başlatmaya çalıştı: windowSoftInputMode = "stateVisible" iletişim başlatmaktan sorumlu olan etkinlik hakkında manifesto ve işe yaramaz ... – mrroboaat

+0

Teşekkür ederim! StackOverflow'ta bu soruna yaklaşık bir düzine başka 'çözüm' var ve bunların hiçbiri benim için çalışmıyor ... ama bu da geçerli. – josh2112

+0

Bu, bulabildiğim her şey arasında en çok çalışan çözümler. Bunun neden onResects() yerine onActivityCreated içinde çağrılması gerektiğini merak ediyorum. Bazı açıklamaları duymayı çok seviyorum. – Sean

12

tyczj cevabı içinde getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); koydu. Bunu kullanmak eğer bu

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder 
      .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        callback.onYesConnectClick(edit.getText().toString()); 
       } 
      }) 
      .setNegativeButton(R.string.refuse, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        callback.onNoConnectClick(); 
       } 
      }); 

    Dialog d = builder.create(); 
     d.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
return d; 
} 
2

setLayout() çağrı dikkat gibi

çözüm Sonunda

Dialog d = builder.create(); 
d.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
return d; 

onCreateDialog

içinde idi, kod olacaktır. Pencerenizin niteliklerini geçersiz kılabileceğinin farkına varmam biraz zaman aldı. Bir işleyiciye sardıktan sonra kabul edilen çözüm benim için çalıştı.

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 

    return dialog; 
} 

@Override 
public void onStart() { 
    super.onStart(); 

    // without a handler, the window sizes itself correctly 
    // but the keyboard does not show up 
    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      getDialog().getWindow().setLayout(DIALOG_WIDTH, DIALOG_HEIGHT); 
     } 
    }); 
} 
+0

sadece mükemmel !. 'setLayout() ', –

4

kullanımı "SOFT_INPUT_STATE_ALWAYS_VISIBLE" yerine "SOFT_INPUT_STATE_VISIBLE" ya onActivityCreated veya onCreateDialog yöntemde.

+0

problemini yaratıyordu. Bu, sonuçta onCreateDialog'da Purgarcita çözümü ile kombine edilmiş bir çözümdü. – user960914

İlgili konular