2014-02-21 43 views
8

我有一個ListView,每行有一個EditText(除了一對不可編輯的TextView)。當我編輯EditText中的文本時,軟鍵盤上有「Next」按鈕 - 然後按下它將焦點移到下一個字段 - 這非常棒。在最後一行,該按鈕變爲「完成」。listview with edittext - 自動滾動「next」

我使用EditText.setImeOptions根據這是否是最後一行將按鈕設置爲「完成」或「下一步」。

問題是,listview可以有更多的行可以放在屏幕上。當發生這種情況時,在下一個可見行上按下「下一步」將焦點再次移動到第一行。我怎樣才能讓它滾動列表並轉到下一行呢?

以供參考,這是我在我的適配器正在做:

public class AuditAdapter extends BaseAdapter { 
    private Context context; 
    private int layoutResourceId; 
    private Audit audit; 

    ... 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     final AuditItemHolder holder = (row == null ? new AuditItemHolder() : (AuditItemHolder)row.getTag()); 

     if(row == null) 
     { 
      LayoutInflater inflater = ...; 
      row = inflater.inflate(layoutResourceId, parent, false); 
      ... 
      holder.qtyf = (EditText)row.findViewById(R.id.item_quantity); 
     } 

     AuditItem item = audit.getItemAt(position); 

     holder.qtyf.setText("" + item.getQuantity()); 
     holder.qtyf.setImeOptions(position == audit.size() - 1 ? EditorInfo.IME_ACTION_DONE : EditorInfo.IME_ACTION_NEXT); 

     ... 

     row.setTag(holder); 
     return row; 
    } 

    private static class AuditItemHolder { 
     ... 
     EditText qtyf; 
    } 
} 

回答

7

好了,掙扎了很長一段時間後,我終於發現,我的情況下工作的黑客(不妥善的解決辦法)。在我的適配器的getView中,我添加了onEditorActionListener,並在其中添加了:

ediField.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     ListView lv = (ListView)parent; 
     if(actionId == EditorInfo.IME_ACTION_NEXT && 
      lv != null && 
      position >= lv.getLastVisiblePosition() && 
      position != audit.size() - 1) { //audit object holds the data for the adapter 
       lv.smoothScrollToPosition(position + 1); 
       lv.postDelayed(new Runnable() { 
        public void run() { 
         TextView nextField = (TextView)holderf.qtyf.focusSearch(View.FOCUS_DOWN); 
         if(nextField != null) { 
          nextField.requestFocus(); 
         } 
        } 
       }, 200); 
       return true; 
     } 
     return false; 
    } 
}); 
+0

已工作... Thnax。 – 2015-10-30 12:48:22