Передать набор атрибутов из фрагмента в пользовательское представление в XML

В следующих файлах у меня в основном есть фрагмент, который содержит 2 пользовательских вида (View_A, View_B). Оба представления могут быть настроены через атрибут в XML.

Я пытаюсь передать атрибут фрагмента в атрибуты пользовательских представлений, используя только XML.

Вот основной пример того, чего я пытаюсь достичь:

Пользовательский вид A, Пользовательский вид B и фрагмент

public class View_A extends HorizontalScrollView {
    private int A_1;

    public View_A(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray attributes = context.getTheme().obtainStyledAttributes(
                attrs,
                R.styleable.View_A,
                0,0);

        try{
            this.A_1 = attributes.getInteger(R.styleable.View_A_A_1, 0);
        }finally {
            attributes.recycle();
        }
    }
}

public class View_B extends View {
    private int B_1;

    public View_B(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray attributes = context.getTheme().obtainStyledAttributes(
                attrs,
                R.styleable.View_B,
                0,0);

        try{
            this.B_1 = attributes.getInteger(R.styleable.View_B_B_1, 0);
        }finally {
            attributes.recycle();
        }
    }
}

public class MyFragment extends Fragment {

    View_A view_A;
    View_B view_B;

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

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        view_A = (View_A) view.findViewById(R.id.view_A);
        view_B = (View_B) view.findViewById(R.id.view_B);
        view_A.setView_B(view_B);
    }

    @Override
    public void onInflate(Context context, final AttributeSet attrs, Bundle savedInstanceState) {
        super.onInflate(context, attrs, savedInstanceState);

    }
}

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="A_1" format="integer"/>
    <attr name="B_1" format="integer"/>

    <declare-styleable name="View_A">
        <attr name="A_1"/>
    </declare-styleable>

    <declare-styleable name="View_B">
        <attr name="B_1"/>
    </declare-styleable>

    <declare-styleable name="MyFragment">
        <attr name="A_1"/>
        <attr name="B_1" />
    </declare-styleable>
</resources>

Макет моего фрагмента

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View_A
        android:id="@+id/view_A"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.constraint.Guideline
                android:id="@+id/guideLine"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                app:layout_constraintGuide_percent="0.1" />

            <View_B
                android:id="@+id/view_B"
                android:layout_width="0dp"
                tools:layout_width="360dp"
                android:layout_height="0dp"
                app:layout_constraintBottom_toTopOf="@+id/guideLine"
        </android.support.constraint.ConstraintLayout>
    </View_A>
</RelativeLayout>

Как я заявляю свой фрагмент

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.timelinebartempsproject.MainActivity">

    <fragment
        android:id="@+id/myFragment"
        android:name="com.example.MyFragment"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        app:A_1="13"
        app:B_1="6" />
</RelativeLayout>

0 ответов

Другие вопросы по тегам