Возвращение дочернего элемента по типу класса в Android

38 просмотра

1 ответ

У меня есть question.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:layout_marginBottom="10dp"
        android:textColor="#239"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:layout_gravity="center_horizontal" />
    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></RadioGroup>
</LinearLayout>

И функция для возврата первого дочернего представления данной парентиды:

public View findViewByType(int parentId, Class<?> type){
    LinearLayout rootLinearLayout = (LinearLayout) findViewById(parentId);
    int count = rootLinearLayout.getChildCount();
    for (int i = 0; i < count; i++) {
        View v = rootLinearLayout.getChildAt(i);
        //Toast.makeText(getApplicationContext(), v.getClass().getName(),Toast.LENGTH_LONG).show();
        if (v.getClass() ==  type) return v;
    }
    return null;
}

Я раздуваю вид, используя question.xmlмакет, как, а затем пытаюсь извлечь из него RadioGroup:

        LinearLayout q = (LinearLayout)getLayoutInflater().inflate(R.layout.question, null);
        RadioGroup rg = (RadioGroup) findViewByType(q.getId(), RadioGroup.class);

rgявляетсяnull

Когда я проверяю это как:

q.getChildAt(0).getClass().GetName();  //return TextView = Correct
q.getChildAt(1).getClass().GetName(); //returns RadioGroup = Correct

но в findViewByTypeцикле функции значение v для:

я = 1 TextViewявляется правильным

я = 2 LinearLayoutэто НЕПРАВИЛЬНО

Что я делаю неправильно?

Кстати, я пытался установить Id для завышенного LinearLayoutперед вызовом функции, но результат тот же.

Автор: Ashkan Mobayen Khiabani Источник Размещён: 08.11.2019 11:25

Ответы (1)


1 плюс

Решение

хм .. LinearLayoutэто включающий класс RadioGroupя скажу пойти на это скорее

v.getClass().isAssignableFrom(type) && (type.isInstance(v))//did it work?

может это скорее?

(v.getClass() ==  type) || (v.getClass().isAssignableFrom(type) && 
                          v.getClass().equals(type.getEnclosingClass()))
Автор: Elltz Размещён: 20.08.2016 02:53
Вопросы из категории :
32x32