Как использовать класс макета в методе фрагмента onCreateView ()? - PullRequest
0 голосов
/ 08 января 2020

У меня есть res / layout / main_menu_layout. xml file:

<?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="wrap_content"
    android:layout_gravity="center"
    >

    <sidekick.cpp.CMainMenuButton
        android:id="@+id/manualMainMenuButton"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:textSize="18sp"
        android:text="@string/main_menu_button_manual_text" />

    <sidekick.cpp.CMainMenuButton
        android:id="@+id/editorMainMenuButton"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:textSize="18sp"
        android:text="@string/main_menu_button_editor_text" />

    <sidekick.cpp.CMainMenuButton
        android:id="@+id/exitMainMenuButton"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:textSize="18sp"
        android:text="@string/main_menu_button_exit_text" />

</LinearLayout>

Этот макет используется в следующем классе:

package sidekick.cpp;

import android.widget.*;
import android.content.*;
import android.view.*;

public class CMainMenuLayout extends LinearLayout {

public CMainMenuLayout(Context context) {
        super(context);
        this.setOrientation(VERTICAL);
        View view =  LayoutInflater.from(getContext()).inflate(
        R.layout.main_menu_layout, null);

        this.addView(view);

        } }

Сейчас Я хочу использовать макет во фрагменте. Если я использую идентификатор макета (R.layout.main_menu_layout) в onCreateView(), то приведенный ниже код работает:

public class CMainMenuFragment extends Fragment implements View.OnClickListener  {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.main_menu_layout, container, false);

    }
...

    }

Но мне нужно использовать класс CMainLayout, а не R.layout.main_menu_layout. Код ниже, кажется, тоже работает, но это правильно?

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        CMainMenuLayout layout = new CMainMenuLayout(this.getContext());
        return layout;
}

1 Ответ

0 голосов
/ 08 января 2020

Сначала вы можете накачать xml макет в CMainMenuLayout напрямую

public CMainMenuLayout(Context context) {
    super(context);
    this.setOrientation(VERTICAL);
    LayoutInflater.from(getContext()).inflate(R.layout.main_menu_layout, this, true);
}

, а затем использовать CMainMenuLayout класс в xml для CMainMenuFragment. Например, res / layout / main_fragment_layout. 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="wrap_content">

    <sidekick.cpp.CMainMenuLayout 
        android:id="@+id/mainMenuLayout"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content" />
</LinearLayout>

и CMainMenuFragment

public class CMainMenuFragment extends Fragment implements View.OnClickListener  {


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.main_menu_fragment, container, false);

}
    ...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...