1

我有一个简单的ListView其中每个项目是EditText。但是,无论何时我尝试开始输入EditText之一,它都立即没有重点(离开软键盘)。调试显示getView()多次尝试选择EditText时被调用。为什么我不能在ListView中选择EditText?

onCreate()

mList = new ArrayList<String>(); 
mList.add("Hello"); 
mList.add("Goodbye"); 

final ArrayAdapter<String> optionListAdapter = new EditTextAdapter(this, mList); 

optionListView.setAdapter(optionListAdapter); 

自定义适配器:

private class EditTextAdapter extends ArrayAdapter<String> { 
    private final Context mContext; 
    private final ArrayList<String> mValues; 

    public EditTextAdapter(Context context, ArrayList<String> list) { 
     super(context, R.layout.edit_text_item, list); 
     mContext = context; 
     mValues = list; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View rowView = convertView; 
     if (rowView == null) { 
      LayoutInflater inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      rowView = inflater.inflate(R.layout.edit_text_item, parent, false); 
     } 
     final EditText editText = (EditText) rowView.findViewById(R.id.editText); 
     editText.setText(mValues.get(position)); 
     editText.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View view, int i, KeyEvent keyEvent) { 
       mValues.set(position, editText.getText().toString()); 
       notifyDataSetChanged(); 
       return true; 
      } 
     }); 
     return rowView; 
    } 
} 

edit_text_item.xml:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/editText" 
     android:hint="Add Item Here"/> 
</LinearLayout> 
+1

提示:总是当你可以创建LayoutInflater作为一个全局变量 – Android

回答

1

onKey()方法,你可以简单地调用editText.requestFocus()毕竟工作是完成(即在之前声明)。

---- ----编辑

如果它不能正常工作,请尝试editText.requestFocus()语句后添加以下两行:

final InputMethodManager imm = (InputMethodManager) getSystemService(Service.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, 0); 
+0

这不是问题。 onKey()回调甚至没有被调用。我只是尝试选择EditText,并且getView()被连续多次调用。 – cstack

2

从删除以下方法调用notifyDataSetChanged();onKey()

并将这些参数添加到清单文件中,用于您已使用清单的活动

android:windowSoftInputMode="adjustPan"

+0

这大大帮助了我。谢谢。请参阅这里的答案http://stackoverflow.com/questions/17410499/difference-between-adjustresize-and-adjustpan-in-android有关'adjustPan'的更多信息 – spogebob92

+0

非常感谢,这似乎是正确的解决方案问题。 –

0

您需要使其使得由listview创建的视图可以包含可聚焦项目。

onCreate()

final ArrayAdapter<String> optionListAdapter = new EditTextAdapter(this, mList); 
optionListAdapter.setItemsCanFocus(true); 
optionListView.setAdapter(optionListAdapter); 

而且在布局xml文件中添加以下到ListView声明:

android:descendantFocusability="afterDescendants" 
相关问题