Android:RecyclerView addOnItemTouchListener内部的setTitle无法正常运行

时间:2019-05-10 22:16:23

标签: android android-recyclerview listener asynctaskloader android-titlebar

[以下更新]

我试图在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 :(得分:0)

我认为问题出在听众上。将侦听器附加到回收器视图时,我会在使用适配器中的接口的整个过程中进行此操作,this博客介绍了方法,还请查看提供了示例的StackOverflow答案。

答案 1 :(得分:0)

您必须通过设置以下标志来启用操作栏以setTitle()。

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);

上面的代码适用于AppCompatActivity。

答案 2 :(得分:0)

我有2个问题。第一个是关于在RecyclerView中点选一个项目以重新加载AsyncTaskLoader之后,不更改标题栏的标题。问题是,除了onLoadFinished之外,Loader函数中还有另一个setTitle,因此我将其删除,并将其保留在onLoadFinished中,现在它可以正常工作,因此无需用操作栏替换默认标题栏。

第二个问题,当我尝试添加操作栏时,标题占据了整个屏幕,如您在图像中看到的那样,因为在根视图中有2个元素,它们是actionBar和NavigationView,它们使actionBar成为实际的内容,这就是为什么它被调整大小以占据整个屏幕的原因。所以我将其放置在LinearLayout中,实际内容位于其下方,从而解决了第二个问题