2012-04-11 4 views
0

У меня есть EditText, который я использую в качестве нижнего колонтитула View для моих ListView. Я пытаюсь получить доступ к фокусу/потерять фокус-события, но по какой-то причине он стреляет несколько раз за фокус. Что здесь происходит?Android - ListView EditText Проблемы с фокусом

// in onCreate 

// ... 

// the footer 
View v = getLayoutInflater().inflate(R.layout.comment_edittext, null); 

EditText commentEditText = (EditText)v.findViewById(R.id.comment_edittext); 
commentEditText.setOnFocusChangeListener(new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) 
    { 
     U.log("View: " + v.getClass().getName().toString()); 

     if(hasFocus) 
     { 
      U.log("Clicked"); 
     } 
     else 
     { 
      U.log("Un Clicked"); 
     } 
    } 
}); 

// add the footer 
commentListView.addFooterView(v); 

// ... 

выход, одного прикосновения, который вызывает клавиатуры является:

04-11 10:22:17.449: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.459: E/004 - X(4576): Clicked 
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.569: E/004 - X(4576): Un Clicked 
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.569: E/004 - X(4576): Clicked 
04-11 10:22:17.689: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.689: E/004 - X(4576): Un Clicked 
04-11 10:22:17.709: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.709: E/004 - X(4576): Clicked 

Я отчасти понимаю, называя несколько событий с hasFocus набором для true, но почему же тогда там также false s, запуск журнала Un Clicked?

EDIT: Кроме того, всякий раз, когда я прокручивать ListView вверх и вниз, перемещая EditText в и из точки зрения, это называть эти события, а также. Возможно, я использую неправильный тип слушателя?

+0

Мое предположение - ваш метод onCreate вызывается несколько раз. – njzk2

ответ

1

Из личного опыта, EditTexts внутри ListViews - это проклятие. Из-за того, что представления перерабатываются и визуализируются, фокус ведет себя странно. Я рекомендую обратиться к проблеме по-другому. На самом деле, если это текстовое поле для комментариев, было бы лучше, если бы это было всегда видно?

Пример компоновки:

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"/> 
    <EditText 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
    </LinearLayout> 
+0

Моя первоначальная попытка состояла в том, чтобы просто разместить его после ListView в XML-файле моего макета. Тем не менее, это не отразилось, поэтому я подумал, что это имеет какое-то отношение к расширению списка ListView. Если есть способ сделать это, я буду открыт для этого. – Josh

+0

Добавлен макет, который я использую для точно такой же цели. – dmon

1

Используйте GridView вместо этого и дать numColumns из 1. Если вам не нравится, как это читает в классах Java, сохранять их в качестве AbsListView (и просто держать их в качестве GridView в вашем xml).

ListView неисправен с EditTexts, GridViews не имеют этих проблем.

+0

Пробовал это, не видя никакой разницы – Joakim

0

Использование Grideview с numColumns of 1 - идеальный способ решить проблему. Я попробовал и решил свою проблему.

Смежные вопросы