[以下更新]
我试图在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);
但是它的尺寸是如此之大,占据了整个屏幕
答案 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中,实际内容位于其下方,从而解决了第二个问题