2016-12-26 149 views
0

我已按照this。我想從Fragment刷新Activity。我有toolbar的後退按鈕,FragmentActivity通信。從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); 
       } 
      }); 
     } 
    }); 

這工作正常,但它完全重新加載應用程序。這裏可以做些什麼,以便我可以避免重新加載操作並刷新活動?

+0

你需要[this](https://developer.android.com/training/basics/fragments/communicating.html) –

+1

使用接口在片段和活動之間進行通信 –

+0

好的,謝謝你的建議。讓我嘗試 。 –

回答

3

使用回調(接口)與片段中的活動進行通信並且不使用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); 
} 
} 
+0

它是如何幫助他的?他想重新參加活動 –

+0

好的,讓我檢查一下。 –

+0

@SatanPandeya你應該使用沒有動畫標誌來刪除活動動畫。 – Spartan

0

把這個在您的片段

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

並把refreshMyData在活動

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

讓我知道,如果不工作

2

定義在您的活動中進行刷新操作的方法。

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方法中發佈。