2016-07-30 92 views
1

我刷新ActionBar标题有问题。该应用程序是相当简单的,目前它只能有一个活动: ` Android SupportActionBar不刷新标题

<android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/app_bar_height" 
     android:fitsSystemWindows="true" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/toolbar_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/AppTheme.PopupOverlay"/> 

     </android.support.design.widget.CollapsingToolbarLayout> 
    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_count_scrolling"/> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fabReset" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_dialog_alert" 
     app:layout_anchor="@id/app_bar" 
     app:layout_anchorGravity="bottom|end"/> 

</android.support.design.widget.CoordinatorLayout> 

布局content_count_scrolling只包含NestedScrollViewRecyclerView内。

我的情况是,当我在任何RecyclerView的行中输入一个数字到EditText时,它会在数据模型中设置一个值,并重新计算总值(所有行的总和)。该总值应设为ActionBar.title。为此,我也使用RxBus。 MainActivity如下:

public class MainActivity extends AppCompatActivity { 
    // .... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_scrolling); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     toolbar.setTitle(""); 

     mRxBus = getRxBusSingleton();   
     // .... 
    } 
} 

public void refreshActionBarTitle() { 
    String total = Data.getTotal(); 
    Timber.d("Refresh bar title with value="+total); 

    toolbar.setTitle(""); 
    setSupportActionBar(toolbar); 
    toolbar.setTitle("Title "+total); 

    // testes also with: 
    // getSupportActionBar().setTitle("Title "+total); 

    Timber.d("Title after refresh: " + getSupportActionBar().getTitle()); 
} 

`

方法refreshActionBarTitle()由RxBus触发。一旦方法被触发,ActionBar的标题也被设置(与日志和调试器一起检查)。问题是,ActionBar不会失效并重新绘制。这只在旋转屏幕后才能完成,这很明显。

所以,请帮助我正确地使工具栏失效。我还必须注意到,这个事件将在EditText的每次更改之后触发,不仅在改变焦点之后,所以我不能使例如无效。整个屏幕。

我查看了Toolbar (SupportActionBar) title changes to app name on orientation change的建议,但他们没有帮助我。

+0

尝试添加getSupportActionBar()。setDisplayShowTitleEnabled(true); – darwin

+0

我认为我也做到了。或者更确切地说,用'false'和'true'来检查它是否失效。没有工作。我也尝试'工具栏'无效,并设置抽屉。也没有什么。 – Dzinek

回答

10

固定。我应该使用CollapsingToolbarLayout.setTitle()方法。这个工作