Как определить, какой RelativeLayout является родителем кнопки? - PullRequest
0 голосов
/ 10 марта 2012

Допустим, у меня есть два разных типа RelativeLayouts.То есть эти 2 RelativeLayouts отличаются, потому что они содержат разные представления.У одного могут быть текстовые представления, изображения и т. Д., А у другого также могут быть некоторые текстовые представления, которые означают нечто совершенно иное, чем другой набор текстовых представлений в другом относительном макете.Допустим, однако, что оба имеют кнопку «Отправить».Поэтому, чтобы прояснить мою точку зрения, приведем некоторый код:

     @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        ViewParent parent = v.getParent();
        if(parent instanceof CustomRelativeLayout){

            CustomRelativeLayout aRelativeLayout = (CustomRelativeLayout)parent;                    

            for(int childrenIndex = 0; childrenIndex < r.getChildCount(); childrenIndex++){

                View childView = aRelativeLayout.getChildAt(childrenIndex);    


            }
        }

    }

Проблема здесь в том, что мы не знаем, на что ссылается CustomRelativeLayout aRelativeLayout.В зависимости от того, какой CustomRelativeLayout это будет, будет зависеть от того, какие конкретные дочерние представления я хочу искать и какую логику я реализую, относящуюся к этим представлениям.Я хотел бы иметь возможность иметь оператор switch, чтобы проверить, какой тип CustomRelativeLayout является родителем.

Итак, я хотел бы задать следующие вопросы:

  1. как получить дополнительную информацию о том, какой экземпляр CustomRelativeLayout ссылается на нажатую кнопку?Есть ли способ получить имя переменной экземпляра?

  2. Как только я узнал эту информацию, как мне получить конкретную информацию о дочерних элементах родительского представления, над которым я работаю?Смысл в том, что у меня может быть 30 дочерних представлений в родительском, но меня интересует только одно конкретное представление (я мог бы хотеть получить текст одного конкретного текстового представления в качестве примера).Я буду знать, чтобы искать его специально, потому что я сделал бы оператор switch для разных экземпляров моего CustomRelativeLayouts (первый вопрос), и поэтому я знаю, какое представление я хочу посмотреть, какую логику выполнить или какие другие методы янужно позвонить.

Буду признателен за любые мысли или помощь с этим.

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

На ваш первый вопрос есть пара вариантов:

  • Используйте отдельные OnClickListener s для каждой кнопки. Тогда каждая кнопка будет вызывать только собственный метод слушателя onClick().
  • Каждой кнопке можно присвоить разные идентификаторы либо в XML (через свойство android:id), либо в коде (через setId(int id)). Затем в onClick() вы можете проверить идентификатор представления, переданного в качестве аргумента.

На ваш второй вопрос:

Поскольку у вас есть родительская ViewGroup, вы можете найти в ней определенные виды, используя:

TextView interestingView = (TextView) parent.findViewById(R.id.interesting);

Это будет искать только дочерние элементы родительского представления.

Если вам нужно получить неизвестное количество просмотров, лучшая стратегия, вероятно, заключается в их повторении, как и сейчас. Вы можете идентифицировать группы представлений, установив тег либо в XML (android:tag), либо в коде (setTag(Object tag)) и проверяя их во время итерации. Например, если у вас есть набор TextView s, и в каждом из них есть либо цвет или животное, вы можете справиться с этим так:

// defined elsewhere
private static final String TAG_COLOR = "color";
private static final String TAG_ANIMAL = "animal";

...

int count = parent.getChildCount();
for (int i = 0; i < count; i++){
    View view = parent.getChildAt(i);
    if (TAG_COLOR.equals(view.getTag()) {
        // handle color
    } else if (TAG_ANIMAL.equals(view.getTag()) {
        // handle animal
    }
}
0 голосов
/ 10 марта 2012

Есть несколько способов сделать это.

  1. Используйте «id» для идентификации просмотров. Вы можете дать разные идентификаторы для разных представлений, и тогда можно будет их идентифицировать. См. http://developer.android.com/reference/android/view/View.html#getId() (документация API View.getId ()) для получения дополнительной информации.

  2. Пометить каждый вид различными тегами и идентифицировать их с помощью тегов. См. http://developer.android.com/reference/android/view/View.html#getTag() (документация API View.getTag ()) для получения дополнительной информации.

  3. Если вы хотите настроить больше, просто наследуйте представления Android по умолчанию и используйте «instanceof» для их идентификации.

...