Android: setTitle внутри RecyclerView addOnItemTouchListener не работает - PullRequest
0 голосов
/ 11 мая 2019

[ОБНОВЛЕНИЕ НИЖЕ]

Я пытаюсь изменить заголовок в строке заголовка по умолчанию после нажатия на элемент в RecyclerView, который находится внутри onLoadFinished (AsyncTaskLoader), но заголовок не отображается 'т изменить.Идея заключается в том, что когда я вкладываю элемент в RecyclerView и данные загружаются, текст строки заголовка тоже должен быть изменен, но это не так.

catsRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(this, catsRecyclerView,new RecyclerTouchListener.ClickListener() {
   @Override
   public void onClick(View view, int position) {
          Categories category = categories.get(position);
          int catId = category.getId();
          setTitle(category.getTitle());
          drawerLayout.closeDrawer(GravityCompat.START);
          commonActions(); //restarting loader and executing other methods
   }

   @Override
          public void onLongClick(View view, int position) {

           }
}));

Когда я регистрирую category.getTitle (), я получаю правильноетекст, но заголовок не меняется, как мне этого добиться?

[Обновить]

Заменена строка заголовка по умолчанию на настраиваемую панель действий. Вот макет действия:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

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

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
     >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical" />

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

</android.support.v4.widget.DrawerLayout>

Актиобарная раскладка

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:id="@+id/primaryToolbar">

</android.support.v7.widget.Toolbar>

Активность

toolbar = findViewById(R.id.primaryToolbar);
    setSupportActionBar(toolbar);
    setTitle("My new title");
    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);

Но ее размер настолько велик, что занимает весь экран

enter image description here

Ответы [ 3 ]

0 голосов
/ 11 мая 2019

Необходимо активировать панель действий для setTitle (), установив следующий флаг.

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);

Приведенный выше код работает для AppCompatActivity.

0 голосов
/ 11 мая 2019

У меня было 2 вопроса. Первый из них заключается в том, чтобы не изменять заголовок заголовка заголовка после добавления элемента в RecyclerView для перезагрузки AsyncTaskLoader. Проблема в том, что в функции Loader есть еще один setTitle в дополнение к onLoadFinished, поэтому я удалил его и оставил внутри onLoadFinished, и теперь он работает нормально, поэтому нет необходимости заменять строку заголовка по умолчанию на панель действий.

Вторая проблема, когда я пытался добавить панель действий, заголовок занимал весь экран, как вы видите на изображении, потому что в корневом представлении есть 2 элемента, которые являются actionBar и NavigationView, которые сделали actionBar фактическим содержание, поэтому оно было изменено, чтобы занять весь экран. Таким образом, я поместил его в LinearLayout, а фактический контент идет под ним, что решило вторую проблему

0 голосов
/ 11 мая 2019

Я думаю, что проблема в слушателе. Когда я присоединяю слушателя к представлению рециркулятора, я делаю это повсюду Используя интерфейс в адаптере, этот блог показывает путь, также проверьте этот StackOverflow ответ, в котором и пример предоставлен.

...