listview和edittext软键盘

时间:2014-01-28 19:34:36

标签: android listview android-edittext

我有自定义模板和edittext字段。当我点击软键盘上的“下一步”按钮时,它只移动焦点两次 - 比按钮改为“OK”。列表有12个项目。 导航到所有项目的方式,不仅仅是2? 你能帮我吗?

我将此模板用于listview:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="3dp" >

    <TextView
        android:id="@+id/head"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="true"
        android:paddingBottom="3dp"
        android:paddingTop="3dp" >

        <EditText
            android:id="@+id/value"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:gravity="left"
            android:inputType="number" >

            <requestFocus />
        </EditText>

        <TextView
            android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:width="100dp" />

    </LinearLayout>

</LinearLayout>

这个xml for listview:

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

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

    <TextView
        android:id="@+id/head"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/calk_1"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="382dp"
        android:divider="@color/reddivider"
        android:dividerHeight="@dimen/twodp"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:smoothScrollbar="true" >

    </ListView>

</LinearLayout>

此外,现在我的适配器:

public View getView(int position,View convertView,ViewGroup parent){

// assign the view we are converting to a local variable
View v = convertView;

// first check to see if the view is null. if so, we have to inflate it.
// to inflate it basically means to render, or show, the view.
if (v == null) {
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = inflater.inflate(R.layout.list_view, null);
}

/*
 * Recall that the variable position is sent in as an argument to this method.
 * The variable simply refers to the position of the current object in the list. (The ArrayAdapter
 * iterates through the list we sent it)
 * 
 * Therefore, i refers to the current Item object.
 */
CalcItem i = objects.get(position);
int last=getCount()-1;

if (i != null) {

    // This is how you obtain a reference to the TextViews.
    // These TextViews are created in the XML files we defined.

    TextView hd = (TextView) v.findViewById(R.id.head);
    TextView tx = (TextView) v.findViewById(R.id.text);
    TextView ds = (TextView) v.findViewById(R.id.description);
    EditText vl = (EditText) v.findViewById(R.id.value);

    if (position==0){
        vl.setNextFocusUpId(last);
        vl.setNextFocusDownId(1);
    } else  if (position==last){
        vl.setNextFocusDownId(0);
    } else {
        vl.setNextFocusDownId(position+1);
    }

    if (hd != null){
        hd.setText(i.getHead());
    }
    if (tx != null){
        tx.setText(i.getText());
    }
    if (ds != null){
        ds.setText(i.getDescription());
    }
    if (vl != null){
        vl.setText(Integer.toString(i.getValue()));
    }
}

// the view must be returned to our activity
return v;

}

2 个答案:

答案 0 :(得分:0)

使用android:nextFocusUp="id"android:nextFocusDown="id" - 如documentation中所述。

以下是文档中的示例:

<LinearLayout
    android:orientation="vertical"
    ... >
  <Button android:id="@+id/top"
          android:nextFocusUp="@+id/bottom"
          ... />
  <Button android:id="@+id/bottom"
          android:nextFocusDown="@+id/top"
          ... />
</LinearLayout>

答案 1 :(得分:0)

据我所知,在ListViews和Recycler视图中,“编辑文本”效果不佳, 如果您要处理编辑文本,我建议您多次给单独的视图充气,而不是制作ListView。