ListView中的Android EditText - 键盘

时间:2011-11-24 14:33:58

标签: android listview android-edittext

我的EditText出了问题。我使用以下适配器:

public class RowTextViewAdapter extends BaseAdapter {

...

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

  ViewHolder holder = null;

    if (rowTitles.get(position).equals("edit")) {
        if(et == null){
            et = new EditText(activity);
            et.setText("Test");
        }
        return et;
    }
    else {
        convertView = new TextRow(activity);
        holder = new ViewHolder(((TextRow) convertView).getTextView(), ((TextRow) convertView).getImageView());
        convertView.setTag(holder);
        holder.getTextView().setText(StringManager.getInstance().getText(rowTitles.get(position), activity));
        holder.getImageView().setImageBitmap(assetController.getBitmap(additiveIcons.get(position) + ".png", null));
        return convertView;
    }
  }
}

ListActivity

public class AppSettingActivity extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        adapter = new RowTextViewAdapter(this);
        adapter.addRowView("account", "arrowDw");
        adapter.addRowView("password", "arrowDw");
        setListAdapter(adapter);
   }

...

   protected void onListItemClick(ListView listView, View view, int position, long id) {
    switch (position) {
        case 0: accIsEditable = adapter.setEditable(position); break;
        case 1: 
            if(accIsEditable) {
                                    //TODO do something..
                break;
            }
            pwIsEditable = adapter.setEditable(position);
            break;
          ...
   }
}

如果我点击第一项,我会在pos上添加一个新的列表项。 1(pos:0,1,2,...)。 现在,EditText字段已添加到列表中。

ListView:
----------------------------          -------------------------    
Account                   v           Account                ^     
----------------------------    ==>   -------------------------     
Passowrd                  v           [::::::::EditText:::::::]      
----------------------------          -------------------------
//more..                              Password               v
----------------------------          -------------------------
                                      //more..
                                      -------------------------

如果我现在点击EditText字段,它会显示虚拟键盘并失去EditText的焦点。我再次点击它会获得焦点。但是,如果我写了一些内容,那么文本只会显示在EditText字段中,如果我点击它而不是经常在我写作的时候......

有什么想法解决这个更新问题吗?

2 个答案:

答案 0 :(得分:40)

如果仍有问题,请查看此项:Focusable EditText inside ListView

此更改可能有所帮助。

更改为listview:

<ListView
    android:id="@android:id/list" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
    android:descendantFocusability="beforeDescendants"
    />

更改为mainfest.xml中的活动:

<activity android:name= ".yourActivity" android:windowSoftInputMode="adjustPan"/>

答案 1 :(得分:1)

有些时候在清单活动或xml中使用android:windowSoftInputMode="stateAlwaysHidden"时,它会丢失键盘焦点。因此,首先检查xml和manifest中的属性,如果有,只需将其删除即可。将这些选项添加到旁边活动android:windowSoftInputMode="adjustPan"中的清单文件后,将此属性添加到xml android:descendantFocusability="beforeDescendants"中的listview