当按下后退按钮时,如何刷新片段的视图?
我在片段的onResume方法中尝试了这个,但它不起作用。
好的,这是代码
布局如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@color/mainscreen_bg">
<fragment
android:id="@+id/topbar"
android:name="de.app.applib.TopbarFragment"
android:layout_width="match_parent"
android:layout_height="@dimen/topbar_height"
android:layout_alignParentTop="true"
tools:layout="@layout/fragment_topbar" />
<fragment
android:id="@+id/position_list"
android:name="de.app.applib.CriteriaListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@id/topbar"
android:tag="CriteriaList"
tools:layout="@layout/fragment_criterialist" />
TopbarFragment具有以下布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/topbar_bg" >
<ImageView android:id="@+id/topbar_home"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_alignParentLeft="true"
android:gravity="center_vertical"
android:src="@drawable/ic_ab_back_holo_light"
android:visibility="invisible"
android:padding="0dp"
android:contentDescription="@string/none"
android:layout_margin="0dp"/>
<ImageView android:id="@+id/topbar_logo"
android:src="@drawable/actionbar_logo"
android:layout_height="30dp"
android:layout_width="120dp"
android:layout_centerVertical="true"
android:padding="0dp"
android:layout_margin="0dp"
android:contentDescription="@string/none"
android:layout_toRightOf="@id/topbar_home"/>
<ToggleButton
android:id="@+id/topbar_btn_push_abo"
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/topbar_btn_info"
android:layout_toLeftOf="@id/topbar_btn_info"
android:background="@drawable/topbar_btn_push_bg"
android:paddingTop="@dimen/padding_topbar_btn_push"
android:textOff=""
android:textOn=""
android:textSize="12sp" />
在Fragment的onCreateView()中,我设置了toggleButton的textOn和textOff值。
此片段包含在所有活动中。
现在,我想在用户按下后退按钮时更新toggleButton的文本。 我在片段的onResume()方法中设置了新文本。调用此方法,但旧文本显示在活动中,而不是新更新的文本。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG,"onCreateView called");
View v = inflater.inflate(ResourceUtils.getCustomizableLayoutID(getActivity(), "fragment_topbar"), container, false);
subscrButton = (ToggleButton) v.findViewById(R.id.topbar_btn_push_abo);
setCountOfNewAdds();
private void setCountOfNewAdds() {
int countOfNewAds = ((App)getActivity().getApplication()).getCountOfNewAds();
subscrButton.setTextOff(countOfNewAds>0?""+countOfNewAds:"");
subscrButton.setTextOn(countOfNewAds>0?""+countOfNewAds:"");
subscrButton.invalidate();
}
@Override
public void onResume() {
super.onResume();
setCountOfNewAdds();
}
答案 0 :(得分:3)
如果您的片段调用replace()
,而不是add()
方法切换到另一个片段(SecondFragment),当按下SecondFragment中的后退按钮时,将再次调用您的片段onCreateView()
方法
答案 1 :(得分:1)
您可以捕获用户在托管片段的活动中单击鼠标。
然后,您可以在片段中调用刷新方法来处理刷新视图。
在您的活动中:
@Override
public void onBackPressed() {
Fragment yourFragment = getSupportFragmentManager().findFragmentById("ID");
(TopbarFragment) yourFragment.setCountOfNewAdds();
}
答案 2 :(得分:1)
问题的解决方案是在布局中使用Framelayout来包含片段,例如
<FrameLayout
android:id="@+id/topbar"
android:name="de.app.applib.TopbarFragment"
android:layout_width="match_parent"
android:layout_height="@dimen/topbar_height"
android:layout_alignParentTop="true"
tools:layout="@layout/fragment_topbar" />
然后使用FragmentManager在onStart()方法
中插入Fragment@Override
protected void onStart() {
super.onStart();
TopbarFragment topbarFragment = (TopbarFragment) getSupportFragmentManager().findFragmentById(R.id.topbar);
if(topbarFragment == null) {
topbarFragment = new TopbarFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.topbar, topbarFragment).commit();
getSupportFragmentManager().executePendingTransactions();
}
}
然后onResume()方法中的更新工作
答案 3 :(得分:0)
就我而言,我正在使用LocationManager
接收用户位置。首先,我打开另一个片段(片段B),然后使用“后退”按钮返回到当前片段(片段A)。然后将view
变量(view == getView())传递给启动locationManager.requestSingleUpdate
的方法。
在收到onLocationChanged
变量更改为另一个值的view
事件之后,而getView()
是正确的。因此,当我以后使用view.textview.text = "aaa"
访问任何控件时,它没有设置新值,并且片段也没有刷新。同样,getView()
并非总是不是null
,如果是从null
而不是onCreateView
获得的话,它可能是onViewCreated
。