Android Edittext: получить LineCount в onCreate () деятельности - PullRequest
2 голосов
/ 11 ноября 2011

Как я могу получить getLineCount () для Edittext в методе onCreate () действия, изменив текст Edittext, как показано ниже:

    @override
    public void onCreate(Bundle savedInstanceState){
        myEditText.setText("EXAMPLE");
        myEditText.getLineCount();
    }

Поскольку представление еще не было нарисованоgetLineCount () всегда будет возвращать 0. Есть ли способ обойти эту проблему?Спасибо!

Ответы [ 3 ]

2 голосов
/ 15 ноября 2011

Это определенно боль. В моем случае мне не нужно было редактировать, поэтому я работал с TextView, но, учитывая, что EditText происходит от TextView, вы должны использовать тот же подход. Я вложил в подкласс TextView и реализовал onSizeChanged для вызова нового слушателя, которого я назвал OnSizeChangedListener. В прослушиватель вы можете позвонить getLineCount() с действительными результатами.

TextView:

/** Size change listening TextView. */
public class SizeChangeNotifyingTextView extends TextView {
    /** Listener. */
    private OnSizeChangeListener m_listener;

    /**
     * Creates a new Layout-notifying TextView.
     * @param context   Context.
     * @param attrs     Attributes.
     */
    public SizeChangeNotifyingTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * Adds a size change listener.
     * @param listener  Listener.
     */
    public void setOnSizeChangedListener(OnSizeChangeListener listener) {
        m_listener = listener;
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        if (m_listener != null) {
            m_listener.onSizeChanged(w, h, oldw, oldh);
        }
    }
}
2 голосов
/ 11 ноября 2011

Тьфу, это проблема с интерфейсом везде.

Вы можете использовать обработчик.Вы опубликуете Runnable, который получит счетчик строк и продолжит обработку.

1 голос
/ 24 февраля 2012

Большое спасибо за последний ответ, он мне очень помог!

В качестве вклада я хотел бы добавить код интерфейса слушателя, который будет зарегистрирован в хуке SizeChangeNotifyingTextView (который может быть добавлен в класс SizeChangeNotifyingTextView):

public interface OnSizeChangeListener {
    public void onSizeChanged(int w, int h, int oldw, int oldh);
}

Наконец, чтобы зарегистрировать слушателя, вы можете сделать это следующим образом:

tv.setOnSizeChangedListener(new SizeChangeNotifyingTextView.OnSizeChangeListener() {
     @Override
     public void onSizeChanged(int w, int h, int oldw, int oldh) {
       ...
     }
});
...