简体   繁体   English

Fragment内的CollapsingToolbarLayout返回null

[英]CollapsingToolbarLayout inside Fragment returning null

I have a viewpager inside in a activity. 我在活动中有一个viewpager。 This activity launch three fragements (not tabbed), as created three different class extends fragment. 此活动启动了三个片段(未选项卡式),因为创建了三个不同的类扩展了片段。 It is working fine with horizontal scrolling in between fragment. 在片段之间水平滚动时效果很好。 Now I want to use collapsingToolbar with separate image display in fragment. 现在,我想将collapsingToolbar与片段中的单独图像一起使用。 Activity - having viewpager, Fragment1 XML having collapsingToolbar, Fragement1 also have 'content_launch.xml' Fragement1 class - toolbar added but while fetching (CollapsingToolbar object it is returning null. 活动-具有viewpager,具有collapsingToolbar的Fragment1 XML和Fragement1也具有'content_launch.xml'Fragement1类-添加了工具栏,但在获取时(CollapsingToolbar对象,它返回null。

Activity XML as below : 活动XML如下:

<LinearLayout 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"
android:orientation="vertical" tools:context=".activity.LaunchActivity">

<android.support.v4.view.ViewPager
android:id="@+id/launchpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1" app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>

Activity Class to launch viewpager Activity类以启动viewpager

ViewPager viewPager = (ViewPager) findViewById(R.id.launchpager);
viewPager.setAdapter(new LaunchAdapter(getSupportFragmentManager
(),getApplicationContext()));

Fragement1 XML 碎片1 XML

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/quote_coordinator"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
        android:background="@android:color/white"
        android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/detail_backdrop_height"
        android:id="@+id/quote_appbar"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/quote_collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim ="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleTextAppearance="@android:color/transparent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView android:id="@+id/quote_backdrop"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:fitsSystemWindows="true"
                    android:scaleType="centerCrop"
                    app:layout_collapseMode ="parallax"/>
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:gravity="center_horizontal" android:orientation="vertical">

                    <TextView android:id="@+id/quote_main_title"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/main_title"
                        android:textColor="@android:color/white"
                        android:textSize="@dimen/main_title"/>

                    <TextView android:id="@+id/quote_sub_title"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/main_sub_title"
                        android:textColor="@android:color/white"
                        android:textSize="@dimen/main_sub_title"/>

                </LinearLayout>

            </RelativeLayout>

            <android.support.v7.widget.Toolbar
                android:id="@+id/quote_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>


        </android.support.design.widget.CollapsingToolbarLayout>


    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_quote"/>
</android.support.design.widget.CoordinatorLayout>

Fragment1 Class: Fragment1类:

public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toolbar quoteToolbar = (Toolbar) getActivity().findViewById(R.id.quote_toolbar);
    ((AppCompatActivity) getActivity()).setSupportActionBar(quoteToolbar);
final CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) getActivity().findViewById(R.id.quote_collapsing_toolbar);
}

collapsingToolbar object returned as null, not able to find any suggestions, can someone suggest possible way to get object.. collapsingToolbar对象返回为null,无法找到任何建议,有人可以建议获取对象的可能方法。

First thing: you should not use onCreate to initialize view elements in fragment, you should use onCreateView instead. 第一件事:您不应使用onCreate初始化片段中的视图元素,而应使用onCreateView。 Second one you don't use getActivity() context. 第二个您不使用getActivity()上下文。

So instead of this code: 因此,代替此代码:

public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toolbar quoteToolbar = (Toolbar) getActivity().findViewById(R.id.quote_toolbar);
    ((AppCompatActivity) getActivity()).setSupportActionBar(quoteToolbar);
final CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) getActivity().findViewById(R.id.quote_collapsing_toolbar);
}

use this: 用这个:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                                     @Nullable Bundle savedInstanceState) {
// inflate your layout.    
View view = inflater.inflate(R.layout.yourlayout, container, false);
Toolbar quoteToolbar = (Toolbar) view.findViewById(R.id.quote_toolbar);
((AppCompatActivity) view).setSupportActionBar(quoteToolbar);
            final CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) view.findViewById(R.id.quote_collapsing_toolbar);

return view
}

Best regards and happy new year! 顺祝商祺,新年快乐! :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM