2017-07-27 132 views
0

我在一個activity中有三個片段A,B和c,activity有一個帶有測試視圖標題的工具欄。如何知道任何片段是活動還是可見?

現在,當我從片段導航到片段時,我想根據顯示的片段更改文本視圖的文本。

對於這個片段中的B和C我得到的主要活動的工具欄和文本視圖,並改變它的標題是這樣的:

 final Toolbar toolbar = (Toolbar) ((MainActivity) getActivity()).findViewById(R.id.toolbar); 
    ((MainActivity) getActivity()).setSupportActionBar(toolbar); 

    TextView title = (TextView) getActivity().findViewById(R.id.textView_Title); 
    title.setVisibility(View.VISIBLE); 
    title.setText(R.string.profile); 

這工作得很好。但是當我回到主要片段時,我想再次改變標題,但沒有改變。

我試圖設置在其主要活動的onCreate方法,並且是這樣的:

@Override 
public void onBackPressed() { 


    DashboardFragment test = (DashboardFragment) getSupportFragmentManager().findFragmentByTag("DASHBOARD_FRAGMENT"); 
    if (test != null && test.isVisible()) { 
     //DO STUFF 

     title = (TextView) findViewById(R.id.textView_Title); 
     title.setVisibility(View.VISIBLE); 
     title.setText(R.string.dashboardTitle); 
    } 
    else { 
     //Whatever 
    } 
    // Do nothing if the back button is disabled. 
    if (!mBackPressCancelled) { 

     if (getFragmentManager().getBackStackEntryCount() > 0) { 
      getFragmentManager().popBackStackImmediate(); 
     } 
     else { 

      super.onBackPressed(); 

     } 
    } 
} 

但是與此改變其到主要片段標題標題甚至乙片段是可見的。

我該怎麼做。請幫忙。謝謝。

編輯:

MainFragment:

 fragmentManager = getSupportFragmentManager(); 
    DashboardFragment fragment1 = new DashboardFragment(); 
    Bundle bundle = new Bundle(); 
    fragment1.setArguments(bundle); 
    fragmentManager.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").commitAllowingStateLoss(); 

片段:

   fragmentManager = ((MainActivity)(mContext)).getSupportFragmentManager(); 
       ProfileFragment fragment1 = new ProfileFragment(); 
       Bundle bundle = new Bundle(); 
       fragment1.setArguments(bundle);   
       fragmentManager.beginTransaction().add(R.id.frame, fragment1, "PROFILE_FRAGMENT").addToBackStack("B").commit(); 

乙片段

 fragmentManager = getActivity().getSupportFragmentManager(); 
      ProfileEditFragment fragment1 = new ProfileEditFragment(); 
      Bundle bundle = new Bundle(); 
      fragment1.setArguments(bundle);  
      fragmentManager.beginTransaction().add(R.id.frame, fragment1, "PROFILE_EDIT_FRAGMENT").addToBackStack("C").commit(); 
+0

總之,你想要改變工具欄標題根據片段權? –

+0

檢查此:https://stackoverflow.com/a/33123356/6021469 –

回答

1

讓你的標題如果你想改變工具欄的標題在活動不同於片段使用interface

創建界面:

public interface OnFragmentTitleChangeListener { 
    void onFragmentTitle(String strTitle); 
} 

在活動

public class YourActivity extends AppCompatActivity implements OnFragmentTitleChangeListener 
{ 
    TextView title; 
    ...... 
    ...... 
    // Initialize title in onCreate method 
    ...... 
    ...... 
    // Override this method 
    public void onFragmentTitle(String strTitle) 
    { 
     title.setText(strTitle); 
    } 

    @Override 
    public void onBackPressed() { 
    FragmentManager fm = getSupportFragmentManager(); 

    if (onBack(fm)) { 
     return; 
    } 
    super.onBackPressed(); 
    } 

    private boolean onBack(FragmentManager fm) { 
    if (fm != null) { 
     if (fm.getBackStackEntryCount() > 0) { 
      fm.popBackStack(); 
      return true; 
     } 
    } 
    return false; 
    } 
} 

從片段的方法的onResume那一套文本後實現此接口。

@Override 
public void onResume() { 
    super.onResume(); 
    ((OnFragmentTitleChangeListener) mContext).onFragmentTitle(getResources().getString(R.string.yourtext)); 
} 
+0

無法正常工作。它仍然顯示b片段的標題,以反向按壓主要片段。 – Sid

+0

@Sid在不同文本的所有片段中設置此onResume方法,它將起作用。 –

+0

我已經設置好了。不工作。 – Sid

1

此功能讓你知道,如果這個片段可見或不可見

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     // Handle when fragment is visible 
    } else { 
     // And not 
    } 
} 

但是,在您的使用情況,如果您使用ViewPagerTab,你可以很容易地通過這個

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      yourFragmentPagerAdapter.getTitle(position); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 
+0

我不使用視圖尋呼機。 – Sid

+0

你可以用第一種方法 – ManishNegi

+0

第一種方法給出無法解析方法setUserVisibleHint的錯誤。需要添加什麼? – Sid

相關問題