从Android中的片段刷新活动
问题描述:
我已按照this。我想从Fragment
刷新Activity
。我有toolbar
的后退按钮,Fragment
到Activity
通信。从Android中的片段刷新活动
这里是我的代码按钮侦听器和刷新活动。我把它包含在片段类中:
final Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Handler().post(new Runnable() {
@Override
public void run()
{
Intent intent = getActivity().getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_NO_ANIMATION);
getActivity().overridePendingTransition(0, 0);
getActivity().finish();
getActivity().overridePendingTransition(0, 0);
startActivity(intent);
}
});
}
});
这工作正常,但它完全重新加载应用程序。这里可以做些什么,以便我可以避免重新加载操作并刷新活动?
答
使用回调(接口)与片段中的活动进行通信并且不使用Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK因为它会清除你的堆栈。
ex。
Fragment{
CallBack callback;
// your button click
onClick(){
callBack.mesage("Hi Activity");
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Callback) {
callback = (Callback) context;
} else {
throw new RuntimeException(context.getClass().getSimpleName()
+ " must implement Callback");
}
}
public interface Callback(){
void message(String message);
}
Activity implements Callback{
@Overide
public void message(String message){
System.out.println(message);
// to refresh activity
Intent intent = getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
startActivity(intent);
}
}
答
把这个在您的片段
public void refreshActivity(){
ActivityName mDashboardActivity = (ActivityName) getActivity();
if(ActivityName!=null){
ActivityName.refreshMyData();
}
}
并把refreshMyData在活动
public void refreshMyData(){
//Code to refresh Activity Data hear
}
让我知道,如果不工作
答
定义在您的活动中进行刷新操作的方法。
public void refreshMyData(){
// do your operations here.
}
而在你的onClick方法:
final Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// If you use a generic toolbar you have to check instance of getActivity before cast.
((YourActivity)getActivity()).refreshMyData();
}
});
编辑:我重构代码。我认为你不需要在onClick方法中发布。
你需要[this](https://developer.android.com/training/basics/fragments/communicating.html) –
使用接口在片段和活动之间进行通信 –
好的,谢谢你的建议。让我尝试 。 –