在我的Main中FragmentActivity,我ActionBar像这样设置我的自定义标题: LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflator.inflate(R.layout.custom_titlebar, null); TextView tv = (TextView) v.findViewById(R.id.title); Typeface tf = Typeface.createFromAsset(this.getAssets(), "fonts/capsuula.ttf"); tv.setTypeface(tf); tv.setText(this.getTitle()); actionBar.setCustomView(v);这完美。但是,一旦我打开other Fragments,我想更改标题。我不确定如何访问Main Activity来执行此操作?过去,我这样做:((MainFragmentActivity) getActivity()).getSupportActionBar().setTitle( catTitle);有人可以建议适当的方法吗?XML:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:ellipsize="end" android:maxLines="1" android:text="" android:textColor="#fff" android:textSize="25sp" /></RelativeLayout>
3 回答
白板的微信
TA贡献1883条经验 获得超3个赞
你在做什么是对的。Fragments没有访问ActionBarAPI的权限,因此您必须致电getActivity。除非您Fragment是静态内部类,否则您应该WeakReference为父级创建一个并调用Activity。getActionBar从那里。
要ActionBar在使用自定义布局时为您设置标题,您Fragment需要致电getActivity().setTitle(YOUR_TITLE)。
你打电话的原因setTitle是因为你打电话getTitle为你的标题ActionBar。getTitle返回该标题Activity。
如果你不想让通话getTitle,那么你就需要创建一个公共方法,设置你的文字TextView中Activity承载Fragment。
在您的活动中:
public void setActionBarTitle(String title){
YOUR_CUSTOM_ACTION_BAR_TITLE.setText(title);
}
在您的片段中:
((MainFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE);
文件:
Activity.getTitle
Activity.setTitle
另外,您无需调用this.whatever提供的代码,只需提示。
- 3 回答
- 0 关注
- 618 浏览
添加回答
举报
0/150
提交
取消