我有一个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());
}
}
}
如何像这些片段一样设置片段工具栏标题?
答案 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);