在listview上的EditText上,InputConnection处于非活动状态

时间:2015-06-22 14:27:08

标签: android android-listview android-edittext

我有CustomListView。当我点击某个项目时,它们会显示更多信息,特别是LinearLayout,其中包含EditText个数(取决于项目)。 当我的列表中有一个项目时,我没有问题(如果我点击EditTextKeyBoard会出现,我可以输入文字)。但是,当我在list上有多个项目时,当我点击EditText时,KeyBoard出现,光标也会出现,但它刚刚消失,我有Error

  

W / IInputConnectionWrapper:getTextBeforeCursor处于非活动状态   InputConnection W / IInputConnectionWrapper:getTextAfterCursor on   不活动的InputConnection

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    MyObject myObject = getItem(position);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item,parent, false);
        holder = new ViewHolder();
        holder.mName = (TextView) convertView
                .findViewById(R.id.name);
        convertView.setTag(holder);
        final LinearLayout layoutDataToSent= (LinearLayout) convertView.findViewById(R.id.layoutDynamique);
        for(int i = 0; i < Info.getNbByteWrite(myObject); i++) {
            EditText edittext = new EditText(mContext);
            edittext.setText("0x");
            edittext.setLayoutParams(new LinearLayout.LayoutParams(100, ViewGroup.LayoutParams.WRAP_CONTENT));
            layoutDataToSent.addView(edittext);
        }
        ...
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    LinearLayout mLayoutWrite = (LinearLayout) convertView.findViewById(R.id.layout_write);
    holder.mName.setText(Info.getName(myObject.getUuid().toString()));
    if (viewSelected == position) {
        if((myObject.getProperties() & MyObject.PROPERTY_WRITE) > 0){
            mLayoutWrite.setVisibility(View.VISIBLE);
        }
    }
    return convertView;
}

感谢您的帮助

编辑:

经过多次尝试,我认为问题来自我的布局。

如果我将Listview的高度设置为:

  • match_parent或wrap_content,我有问题,
  • 修复950dp例如1000dp,我没有在edittext上写文本的问题,但我看到所有数据都有问题(我无法滚动列表视图)。

这是我的包含listview的布局(它是一个片段):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@+id/my_listview"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:divider="@android:color/transparent"
        android:dividerHeight="5dp" />
</LinearLayout>

这是list_item.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="20dp"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceListItemSmall"
            android:textSize="18sp"
            android:textStyle="bold"  />
    ...
    </LinearLayout>
    <LinearLayout
        android:id="@+id/layout_write"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_below="@+id/linearLayout1"
        android:layout_marginStart="20dp"
        android:orientation="horizontal"
        android:visibility="visible" >
        <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
            android:id="@+id/layoutDynamique"
            android:layout_width="400dp"
            android:layout_height="wrap_content"
            android:orientation="horizontal"/>
       ...
    </LinearLayout>
    <View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_alignParentBottom="true"
    android:background="#aaa" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

尝试将theese行添加到您的代码中。我应该重置任何输入连接

...
EditText edittext = new EditText(mContext);
edittext.setText("0x");
edittext.setLayoutParams(new LinearLayout.LayoutParams(100, ViewGroup.LayoutParams.WRAP_CONTENT));
layoutDataToSent.addView(edittext);

//add folowing
edittext.requestFocus();
InputMethodManager inputManager = (InputMethodManager)context.getSystemService(INPUT_METHOD_SERVICE);
inputManager.restartInput(edittext);
....

答案 1 :(得分:0)

建议适用于&#34;大多数&#34;设备

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);

用于EditText视图(在您调用`editText.setInputType(InputType.TYPE_NULL)之后;)。&#39;

您可能还应该设置:

 editText.setTextIsSelectable(true);

同时声明您的EditText不应该是活动开始时获得焦点的第一个视图(如果是 - 只是来自另一个视图的requestFocus())。