Как можно определить, когда оно привязано к его родительскому объекту?

У меня есть представление, которое нужно обнаружить, когда оно привязано к его родительскому виду.

В ViewGroup у меня есть OnHierarchyChangeListener , который позволяет мне знать, когда дочерний вид добавляется/удаляется, но мне нужно другое дело.

13
nl ja de
Я читал о функции, но это не похоже на то, что мне нужно. Из того, что я понимаю, он вызывается только тогда, когда представление собирается нарисовать себя, но я должен знать, когда он добавляется к родительскому элементу, что может произойти задолго до начала процесса рисования. Кроме того, я не уверен в поведении этой функции, если представление удалено и добавлено к другому родителю. Его снова называют?
добавлено автор user940016, источник
Я думал, что это просто onAttachedToWindow
добавлено автор Blundell, источник
onDetach будет вызываться, затем onAttach, как об их переопределении и добавлении журнала для выяснения
добавлено автор Blundell, источник

4 ответы

Вы можете создать собственное представление и сделать свой материал в onAttachedToWindow

public class CustomView extends View {

   public CustomView(Context context) {
       super(context);
   }

   @Override
   protected void onAttachedToWindow() {
       super.onAttachedToWindow();
       Log.d("CustomView", "onAttachedToWindow called for " + getId());
       Toast.makeText(getContext(), "added", 1000).show();
   }
}

[РЕДАКТИРОВАТЬ 1]

вы можете убедиться, что ваше пользовательское представление добавлено в правильную группу просмотра, которую вы хотите

@Override
 protected void onAttachedToWindow() {
   //TODO Auto-generated method stub
    super.onAttachedToWindow();

    if(((View)getParent()).getId()== R.id.relativelayout2)
    {           
        Log.d("CustomView","onAttachedToWindow called for " + getId());
        Toast.makeText(context, "added", 1000).show();          
    }

}
15
добавлено
Извините, что вы правы, PLS посмотреть на отредактированный ответ.
добавлено автор Talha, источник
Для вашей проблемы вы также должны контролировать родителя, вы можете посмотреть отредактированный ответ
добавлено автор Talha, источник
Но представление не добавляется к родительскому виду, когда оно построено! Я хочу знать, когда addView вызывается в некоторой группе представлений, когда этот вид передается как аргумент.
добавлено автор user940016, источник
Пожалуйста, см. Мой комментарий выше. Я не уверен, что onAttachedToWindow - правильное решение для моей проблемы.
добавлено автор user940016, источник

Вы можете рассматривать эту проблему под другим углом, если вы контролируете родителей для прикрепленных представлений, реализуя метод onViewAdded.

Пример:

public class LayoutInvokeChildAdded extends RelativeLayout {

    private OnDoneListener onDoneListener;

    public LayoutInvokeChildAdded(Context context) {
        super(context);
    }

    public LayoutInvokeChildAdded(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LayoutInvokeChildAdded(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void onViewAdded(View child) {
        super.onViewAdded(child);
        if (onDoneListener != null)
            onDoneListener.onDone(childe);
    }

    public void setOnDoneListener(OnDoneListener onDoneListener) {
        this.onDoneListener = onDoneListener;
    }
}
0
добавлено

Ну, у вас есть представление в OnHierarchyChangeListener, поэтому я бы предположил, что вы могли бы добавить обратный вызов к вашим представлениям (путем подклассификации их с помощью интерфейса) и вызвать его из OnHierarchyChangeListener. Таким образом, ваши представления будут вызываться одновременно с вызовом OnHierarchyChangeListener.

Однако я не удивлюсь, что когда это произойдет, многие свойства ваших представлений, такие как их размеры, еще не определены.

0
добавлено
Но это ограничивает функциональность только родителями, которые ее поддерживают ...
добавлено автор user940016, источник
Да, конечно: это не автоматический процесс для родителей.
добавлено автор SylvainL, источник

Я думаю, что если вам нужен такой контроль, лучше всего сделать его фрагментом. Таким образом, вы получаете доступ к гораздо более гранулированному жизненному циклу.

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)