0

У меня есть EditText в каждом дочернем элементе в ExpandableListView, но есть проблема: когда я нажимаю EditText, иногда курсор мигает нормально, но иногда курсор не появится, или курсор появится, но не мигает.Курсора EditText в ExpandableListView не мигает или появляется

Я пробовал много способов, но никто не работает.

Внизу пути я пытался, но не работает:

  1. набор для каждого EditText ребенка в Java

    View.OnFocusChangeListener onFocus = new View.OnFocusChangeListener() { 
        @Override 
        public void onFocusChange(View v, boolean hasFocus) { 
         v.dispatchWindowFocusChanged(hasFocus); 
        } 
    }; 
    
  2. набор для ExpandableListView

    android:descendantFocusability="afterDescendants" 
    android:focusable="false" 
    
  3. для дочернего элемента в xml

    android:textCursorDrawable="@null" 
        android:cursorVisible="true" 
    

Я понятия не имею об этом вопросе, пожалуйста, помогите, очень спасибо ~~~

+0

У вас есть андроид: focusableInTouchMode = "true" и андроид: focusable = "false" в дочернем элементе? – Nas

+0

@Nas Спасибо ~ Я просто попробовал ваш код, он не работает. TAT – DawnYu

+0

Вы нашли решение? – Ircover

ответ

0

Как я узнал, что это происходит, когда внутренний таймер Invalidate EditText «s по каким-то причинам останавливается. Я не знаю, почему.

Все, что я мог сделать, это создать мой собственный Handler, чтобы аннулировать представление в моем классе, расширяя EditText.

@Override 
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 
    super.onFocusChanged(focused, direction, previouslyFocusedRect); 
    if(focused) { 
     handler.postDelayed(this, 200); 
    } else { 
     handler.removeCallbacks(this); 
    } 
} 

@Override 
public void run() { 
    invalidate(); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       Thread.sleep(250); 
       if(hasFocus()) { 
        handler.post(MyEditText.this); 
       } 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 

Я не думаю, что это хорошее решение. Если вы знаете, лучше напишите.