Динамический TextView на ActionBar

Мне нужно реализовать TextView в ActionBar. Этот TextView показывает статус соединения Bluetooth, поэтому он будет обновляться в зависимости от этого состояния.

Я не говорю об изменении названия ActionBar, но добавляю textview fe под заголовком или с правой стороны.

На данный момент, что я сделал, создайте элемент в menu.xml:

<item android:id="@+id/statusTextview" android:actionViewClass="android.widget.TextView" android:showAsAction="ifRoom" android:title="Disconected" /> 

Затем добавьте его в mainActivity:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.bluetooth, menu); return true; } @Override public boolean onPrepareOptionsMenu(final Menu menu) { final MenuItem menuItem = menu.findItem(R.id.statusTextview); tvStatus = (TextView) menuItem.getActionView(); return super.onPrepareOptionsMenu(menu); } 

Но он работает неправильно. В первый раз должен отображаться статус Disconnected и ничего не показывать. Затем, когда статус изменяется и текстовое окно должно обновляться, оно выдает NPE .

Solutions Collecting From Web of "Динамический TextView на ActionBar"

Вы можете добавить TextView вручную в

 @Override public boolean onCreateOptionsMenu(Menu menu) { 

Следуя коду.

 TextView tv = new TextView(this); tv.setText(getString(R.string.matchmacking)+" "); tv.setTextColor(getResources().getColor(R.color.WHITE)); tv.setOnClickListener(this); tv.setPadding(5, 0, 5, 0); tv.setTypeface(null, Typeface.BOLD); tv.setTextSize(14); menu.add(0, FILTER_ID, 1, R.string.matchmacking).setActionView(tv).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

И если вы хотите получить доступ к текстовому виду, сделайте tv как переменную класса.

На всякий случай кому-то все еще нужно:

Вы можете динамически установить текстовое свойство элемента меню, вызвав метод setTitle("Your new string or String resource id") в пункте меню. Таким образом, вам не нужно включать ActionView в TextView. Например:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { String bluetoothStatus = "Connected"; //get from source menu.findItem(R.id.the_id_of_the_menu_item).setTitle(bluetoothStatus); return super.onPrepareOptionsMenu(menu); }