在Android

时间:2016-12-26 07:15:50

标签: android android-studio android-fragments handler

我已关注this。我想从Activity刷新Fragment。我在toolbar进行了FragmentActivity通信的后退按钮。

这是我的按钮监听器代码并刷新活动。我将它包含在片段类中:

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);
                }
            });
        }
    });

这很好用,但它完全重新加载应用程序。这里可以做些什么,以便我可以避免重新加载操作并刷新活动?

3 个答案:

答案 0 :(得分:4)

使用回调(接口)与片段中的活动进行通信,不要使用 Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK 因为它会清除您的堆栈。

离。

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);
 }
}

答案 1 :(得分:3)

定义一个在您的活动中执行刷新操作的方法。

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方法上发帖。

答案 2 :(得分:0)

将其放入您的片段

 public void refreshActivity(){
        ActivityName mDashboardActivity = (ActivityName) getActivity();
        if(ActivityName!=null){
            ActivityName.refreshMyData();
        }
    }

并将refreshMyData放入您的活动

 public void refreshMyData(){
       //Code to refresh Activity Data hear 
    }

如果没有工作,请告诉我