2011-11-24 122 views
20

我的EditText有問題。我用下面的適配器:ListView中的Android 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字段,如果我點擊它,而不是頻繁的,而我正在寫...

任何想法來解決該更新問題?

+0

這聽起來非常像這個問題:http://stackoverflow.com/questions/6918494/edit-text-in-listactivity- listview-looses-focus-when-keyboard-comes-up 希望它有幫助:-) – atraudes

+0

嗯,我也有那些焦點問題。我試了一下:'addTextChangedListener' - >調試是正確的 - 顯示正確的文本。 – Javatar

+0

但我不知道如何設置文本('EditText.setText(「新的監聽器文本」)')沒有例外。 我還沒有找到在EditText上再次設置FOCUS的方法。我唯一能做的就是調用'getInstance()。notifyDataSetChanged()',但是之後我必須再次手動點擊EditText字段,它只寫入一個字母.. 使用'EditText.requestFocus )'鍵盤沒有出現,並且EditText不再可以被聚焦 – Javatar

回答

38

如果這仍是一個問題,看看這個項目:Focusable EditText inside 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"/> 
+0

謝謝,但我用盡了時間,所以...拒絕 – Javatar

+1

謝謝,這就像一個魅力:) – Proxy32

+8

'android:windowSoftInputMode =「adjustPan」'獨自爲我工作。 – Pang

1

有些時候,你使用清單活動或XML android:windowSoftInputMode="stateAlwaysHidden",到時候會失去鍵盤焦點。所以首先檢查你的XML和清單中的屬性,如果它在那裏只是刪除它。將這些選項添加到清單文件的副作用android:windowSoftInputMode="adjustPan"並將此屬性添加到xml的列表視圖中android:descendantFocusability="beforeDescendants"

+0

很簡單的答案 – 2015-11-25 05:42:29