2015-12-17 3 views
2

У меня есть диалог с динамическим содержимым, поэтому я создал ListView внутри этого диалога, а затем адаптер, который решает, что макет каждый элемент имеет,EditText в ListView внутри dialogfragment не открывается Sw клавиатуры

адаптер выбирает из 3 макеты,

  • один содержит флажок - работает отлично
  • второй содержит блесну - отлично работает
  • третий содержит EditText - SW клавиатуры никогда не будет отображаться

Вот макет EditText элемент

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:minHeight="?android:listPreferredItemHeight" 
       android:paddingStart="24dp" 
       android:paddingEnd="24dp" 
> 

    <TextView 
      android:id="@+id/name" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="2" 
      android:text="Test" 
      android:gravity="center_vertical" 
      android:layout_gravity="center_vertical" 
    /> 

    <EditText 

      android:id="@+id/value" 
      android:layout_width="300dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_vertical" 
      android:layout_gravity="center_vertical" 
      android:focusable="true" 
    /> 

</LinearLayout> 

и адаптер выборе макета:

class FieldAdapter extends ArrayAdapter<ProfileField> { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final ProfileField field = getItem(position); 
     switch (field.type) { 
      case ProfileFieldType.CUSTOM_TEXT: 
       convertView = inflater.inflate(R.layout.scanprofile_dialog_edit_item, parent, false); 
       break; 
      case ProfileFieldType.CUSTOM_CHECK: 
       convertView = inflater.inflate(R.layout.scanprofile_dialog_checkbox_item, parent, false); 
       break; 
      default: 
       ProfileField.ListProfileField listField = (ProfileField.ListProfileField) field; 
       convertView = inflater.inflate(R.layout.scanprofile_dialog_item, parent, false); 
       break; 
     } 
     return convertView; 
    } 
    ... 
} 

Я попытался добавить это onCreateDialog

final AlertDialog alertDialog = builder.create(); 
final Window dialogWindow = alertDialog.getWindow(); 
dialogWindow.clearFlags(
     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 
dialogWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
return alertDialog; 

Но Ждут» t помочь вообще.

Любые идеи, почему клавиатура SW не отображается?

+0

удалите 'android: focusable =" true "' и попробуйте – Sree

+0

попробовал, что на самом деле 'android: focusable =" true "' был добавлен как один из безнадежных попыток – Mazmart

+0

Я использовал 'dialog.getWindow(). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);' и он отлично работает для меня. – vijaypalod

ответ

0

EditText Просмотр в ListView не поддерживается в Android, так как оба требуют фокуса для правильной работы. В вашем случае все событие потребляется ListView, поэтому клавиатура не открывается, когда вы пытаетесь щелкнуть мышью на EditText. Вы можете сфокусироваться на EditTextView, но это создаст проблему в функциональности ListView.

Вы можете либо поместить EditText в верхний/нижний колонтитул ListView, либо если у вас есть , исправьте количество просмотров, как только 3, а затем непосредственно постройте эти представления в диалоговом окне, а не раздуйте их внутри ListView.

Обратитесь к here, если вы все еще хотите использовать EditText внутри ListView.

+0

Хм, ну, конечно, это зависит от пользователя, чтобы объединить количество предметов, так что вы говорите, что либо я создам макет все программно, либо мне не повезло? – Mazmart

+0

См. Дополнительную ссылку по вашему вопросу. – Avi

0

добавить в XML

<EditText...> 
<requestFocus /> 

добавить в код

boolean checkFocus=youredittext.requestFocus(); 
Log.i("CheckFocus", ""+checkFocus); 
if(checkFocus==true) 
{ 
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(youredittext, InputMethodManager.SHOW_IMPLICIT); 
} 
+0

это не помогло, у edittext есть фокус, курсор мигает, но клавиатура не отображается – Mazmart

0

вы можете попробовать этот код (помощь вы активно это сделать) в любое время вы хотите)

//edittext demo code 

final EditText myEditText = (EditText)findViewById(R.id.editText); 
    myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      myEditText.postDelayed(new Runnable() { 
       @Override 
       public void run() { 

        InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        keyboard.showSoftInput(myEditText, 0); 
       } 
      }, 50); //require system show soft keyboard after 50 miliseconds 
     } 
    }); 
Смежные вопросы