片段工具栏标题设置的片段

时间:2017-01-11 04:18:40

标签: android

我有一个Activity和很多片段在这个Activity之间切换,我在这个Activity中设置了工具栏标题,如下所示: 这个活动:

@Override
public void onClick(View view) {
    int id = view.getId();
    if (id == R.id.logIn){
        switchFragment(LogInFragment.newInstance());
        //when i switch fragment , i change the tile by this code
        toolbar.setTitle(R.string.pageLogIn);
        drawerLayout.closeDrawer(GravityCompat.START);
    }
    if (id == R.id.singUp){
        switchFragment(SignUp.newInstance());
        toolbar.setTitle(R.string.singUp);
        drawerLayout.closeDrawer(GravityCompat.START);
    }
}

private void switchFragment(Fragment fragment) {
    FragmentManager manager = getActivity().getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.replace(R.id.mainFrame, fragment, null);
    //transaction.addToBackStack(null);
    transaction.commit();
}

这是我的活动布局:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.user.taiwandigestionsociety_v11.MainActivity">


    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF">



        <android.support.v7.widget.Toolbar
            android:id="@+id/toolBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:theme="@style/ToolBarStyle"
            android:background="@drawable/actionbar">
        </android.support.v7.widget.Toolbar>

        <FrameLayout
            android:id="@+id/mainFrame"
            android:layout_gravity="end"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </FrameLayout>

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


    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@android:color/transparent"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header">
    </android.support.design.widget.NavigationView>


</android.support.v4.widget.DrawerLayout>

我的问题是其中一个片段有一个按钮,它会切换到新片段,我无法通过Activity java切换工具栏标题。

我尝试了另一种设置函数来调用Activity开关功能的方法,应用程序将崩溃。

我试着这样:

public class Welcome extends Fragment implements View.OnClickListener {
    @Override
    public void onClick(View view) {
        int id = view.getId();
        if (id == R.id.welcomeLogin){
            MainActivity mainActivity=new MainActivity();
            mainActivity.switchFragment(ActivityHomePage.newInstance());
        }
    }
}

如何像这些片段一样设置片段工具栏标题?

3 个答案:

答案 0 :(得分:0)

不要像这样创建instance Activity!而是将context MainActivity传递给Fragment,然后使用它进行更改。

 - MainActivity mainActivity=new MainActivity();
 - mainActivity.switchFragment(ActivityHomePage.newInstance());

答案 1 :(得分:0)

在活动中创建一个方法:

 public void setToolBar(String title) {
        getSupportActionBar().setTitle(title);
   }

并在片段onCreateView中调用此方法:

  ((MainActivity) getActivity()).setToolBar(title);

答案 2 :(得分:0)

首先定义的主要活动

private HomeActivity activity;
设置值“onCreate”方法后

activity = (HomeActivity) getActivity();

设置工具栏值:

HeaderBar headerBar;
headerBar = (HeaderBar) view.findViewById(R.id.headerBar);

示例i hv在tital bar中设置右侧图像:

headerBar.ivRight.setImageResource(R.mipmap.save);