Как правильно использовать findViewById

469
17 мая 2017, 06:11

У меня примерно следующая иерархия id:

<DrawerLayout>
    <CoordinatorLayout>
        <CoordinatorLayout>
            <FrameLayout> id=name1
                <FrameLayout> id=name1_1
                <FrameLayout> id=name1_2

И есть еще один фрагмент, который отдельно:

<CardView> id=name2
    <ImageView> id=name2_1
    <TextView> id=name2_2
    <TextView> id=name2_3

В своем MainActivity я могу получить элемент с id=name1, написав просто findViewById(R.id.name1), с name1_1 и name1_2 - уже findViewById(R.id.name1).findViewById(R.id.name1_1), например.
Затем в коде я поступаю следующим образом:

getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.name1_2, new MyFragment())
                .commitAllowingStateLoss();

Где MyFragment имеет разметку элемента c id=name2:

public class MyFragment extends android.support.v4.app.Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.name2, container, false);

В итоге, по идее, я должен буду получить элементы name2_1 и name2_2 вот так: findViewById(R.id.name1).findViewById(R.id.name2).findViewById(R.id.name2_1),

однако, findViewById(R.id.name1).findViewById(R.id.name2) возвращает нужный элемент, а вот findViewById(R.id.name1).findViewById(R.id.name2).findViewById(R.id.name2_1) уже возвращает null.

В чем проблема и как правильно достать из кода элементы name2_1 и name2_2, с учетом подмены фрагментом? Если бы изначально была такая же иерархия, я бы получил нужный элемент, а пока что я получаю null.

Answer 1

Неправильно извлекаете, надо извлекать id из вьюшки которую получили инфлейтом, типа:

public class MyFragment extends android.support.v4.app.Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.name2, container, false);
        View view_name2_1=v.findViewById(R.id.name2_1); 
    }
READ ALSO
Конвертировать #FF00FFFF в 0x00FFFFFF

Конвертировать #FF00FFFF в 0x00FFFFFF

Как бы суть в заголовкенадо конвертировать строку #AARRGGBB в 16 ричное число 0xrrggbbaa?

365
Авторизация в WebView(Android)

Авторизация в WebView(Android)

Есть сайт http://studknutd

619
Как возвратить массив в методе в Java

Как возвратить массив в методе в Java

Здравствуйте, сильно не пинайте, но не могу понять как я могу вставить массив в return метода

387
Как сохранить пароль через web view?

Как сохранить пароль через web view?

Захожу на сайт через web view, ввожу пароль и логин, хочу чтобы при следующей загрузке страницы предлагало ввести пароль, как у браузере

336