Я пытаюсь создать ListView
(с пользовательским CursorAdapter
) из EditText
элементов, так что EditTexts
сначала будет недоступен для редактирования и станет доступным для редактирования при длинном щелчке.Затем пользователь будет редактировать EditText
содержимое, а EditText
будет сохранять изменения в дБ при потере фокуса.Однако я столкнулся с очень неприятным поведением, которое мешает мне сделать это.
1) Я установил свои EditTexts
на android:focusable="false"
и android:focusableInTouchMode="false"
в XML.
2) Я создал OnItemLongClickListener
в моем ListActivity
, который выполняет следующее:
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
Если я удаляю настройку линии с фокусировкой на false (et.setFocusableInTouchMode(false);
), я получаю еще hasFocus true called unfocused
.Очевидно, что дела идут так:
1) EditText
получает фокус при настройке фокусировки
2) LinearLayour
, содержащий мой ListView
, теряет фокус и вызывает внутренний unFocus()
для всех своих детейвключая мой EditText
3) EditText
теряет фокус
4) EditText
получает фокус - по любой причине сейчас.
Это поведение не позволяет мне отключить EditText
при потере фокуса или отключении фокуса до следующего длинного щелчка, чего я и хочу.Кто-нибудь может подсказать, чего мне не хватает?Или объяснить это поведение?Любые решения приветствуются.