简体   繁体   English

listview和edittext软键盘

[英]listview and edittext softkeyboard

I have custom template with edittext field. 我有带有edittext字段的自定义模板。 When I click on "next" button on softkeyboard it move focus only two time - than button changed to "OK". 当我单击软键盘上的“下一个”按钮时,它仅移动焦点两次-而不是将按钮更改为“确定”。 List have 12 items. 清单有12个项目。 Any way to navigate to all items, not only 2? 有什么方法可以导航到所有项目,而不仅仅是2? Can you help me please? 你能帮我吗?

Im use this template for listview: 我将这个模板用于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>

And this xml for listview: 而此XML用于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>

Also, here my adapter right now: 另外,现在是我的适配器:

public View getView(int position, View convertView, ViewGroup parent){ 公共View getView(int位置,View convertView,ViewGroup父级){

// 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;

} }

Use android:nextFocusUp="id" and android:nextFocusDown="id" - as described in the documentation . 按照文档中的说明使用android:nextFocusUp="id"android:nextFocusDown="id"

Here's an example from the docs: 这是文档中的示例:

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM