我試圖創建一個ListView
(定製CursorAdapter
)的EditText
項目,使得EditTexts
出現在第一不可修改成爲在長按可編輯。然後,用戶將編輯EditText
內容,EditText
會在失去焦點時保存對db的更改。然而,我遇到了一個非常討厭的行爲,這使我無法做到這一點。ListView的項目主要集中行爲
1)我已經將XML文件中的EditTexts
設置爲android:focusable="false"
和android:focusableInTouchMode="false"
。
2)我已經創建了一個我ListActivity
的OnItemLongClickListener
,做以下操作:
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
{
Log.d("NLAc", "longClick called");
EditText et = (EditText) view.findViewById(R.id.etFolderName);
et.setFocusable(true);
et.setFocusableInTouchMode(true);
return true;
}
3)當我創建我的適配器的觀點我附上以下焦點變化監聽器:
public void onFocusChange(View v, boolean hasFocus)
{
if (hasFocus)
{
EditText et = (EditText)v;
Log.d(TAG, "hasFocus true called " + et.getText());
et.setText("focused");
et.setSelection(et.length());
}
else
{
EditText et = (EditText)v;
Log.d(TAG, "hasFocus false called " + et.getText());
et.setText("unfocused");
et.setFocusableInTouchMode(false);
//TODO Save to DB
}
}
會發生什麼事是,當我長單擊第一個項目,我得到日誌中的以下內容:
longClick called
hasFocus true called item1
hasFocus false called focused
如果我刪除線設置可聚焦於假(et.setFocusableInTouchMode(false);
)我得到另一個hasFocus true called unfocused
。 顯然,事情是這樣的:
1)EditText
獲取設置可聚焦含
2)LinearLayour
我ListView
失去焦點,並在所有調用內部unFocus()
時注重它的孩子,包括我的EditText
3)EditText
損失焦點
4)EditText
焦點 - 無論出於何種原因。
此行爲阻止我在失去焦點或使其無法對焦之前禁用EditText
,直到下一次長時間點擊發生,這正是我想要的。 任何人都可以建議我可能會失蹤?或者解釋這種行爲?任何解決方案讚賞
你確定這樣保存用戶輸入是件好事嗎?您通常會有一個按鈕來保存用戶的輸入數據,並進一步與您的數據流一起。或者在活動開始時保存它.Pause()或用戶離開活動。它會爲你節省一大堆時間並避免痛苦。只是說... –
我在考慮添加一個「完成」按鈕,但我真的希望能夠保存任何東西,比如失去焦點或在軟鍵盤上輸入。 –
我明白,但我真的會建議看http://ux.stackexchange.com/questions/8868/best-practices-for-uidesign-on-android-usability-ux,當然在http://www.androidpatterns .com和這裏去你的ENTER軟KB按鈕http://stackoverflow.com/questions/4451374/use-enter-key-on-softkeyboard-instead-of-clicking-button –