小编AA_*_*_PV的帖子

水平RecyclerView与可变项目高度没有正确包装

我打算实现的目标

在此输入图像描述

项目视图应占据项目的整个高度

在此输入图像描述

可能是项目高度小于recyclerview中最高项目的高度,在这种情况下,它应该像上面的屏幕截图中那样粘在顶部.

我遇到的错误

在此输入图像描述

如上面的屏幕截图所示,视图被截断.

到目前为止我尝试过的

最初我在recyclerview上使用wrap_content,现在它已得到支持.当当时在屏幕上看不到的任何视图都是最高的时候,它不起作用.这对视图层次结构的布局有意义.如果高度取决于该数据,如何计算甚至没有绑定到任何数据的东西的高度?

解决时间:S

我没有尝试自定义布局管理器,而是首先选择了我认为需要完成的工作 - 在开始时列出所有项目视图以确定它们的高度.

在屏幕的上半部分有一个进度条和一个动画,以吸引用户的注意力,而这一切都发生在recyclelerview可见性被设置为不可见的情况下.我使用了两件事,一件是不够的 - 我在适配器的onViewAttached()调用中附加了一个观察者,我也使用了滚动更改监听器.有一个LinearSnapHelper附加到回收器视图,以捕捉到滚动的相邻(下一个或上一个,取决于滚动方向)位置.

在此设置中,

  1. 我将使用Recyclerview中的每个位置 layoutManager.smoothScrollToPosition()
  2. 使用获取子视图高度

            View currentChildView = binding.nextRv.getChildAt(layoutManager.findFirstCompletelyVisibleItemPosition());
            if (currentChildView != null) {
                currentChildHeight = currentChildView.getHeight();
            }
    
    Run Code Online (Sandbox Code Playgroud)

在滚动更改侦听器中RecyclerView.SCROLL_STATE_IDLE或通过将高度传递给适配器的onViewAttachedToWindow()中上面提到的视图附加观察器

@Override
public void onViewAttachedToWindow(BindingViewHolder holder) {
    if (mObserver != null) {
        mObserver.onViewAttached(holder.binding.getRoot().getHeight());
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 存储maxHeight更改为maxHeight和新子高度的最大值.

很明显,这很难看.另外它并没有给我当前视图的高度 - onAttached意味着它只是附加,而不是测量和布局.它是循环视图,而不是绑定到当前数据项的视图.这会出现如上所示的截断视图等问题.


我还在回收器视图上尝试了wrap_content高度,并从回收器的父进程中失效,直到回收器和滚动子进入SCROLL_STATE_IDLE.不行.


我不确定自定义布局管理器如何在这里提供帮助.

有人能引导我朝正确的方向发展吗?

android horizontallist android-recyclerview

10
推荐指数
2
解决办法
2161
查看次数

Spring Security with Spring Boot:使用过滤器时,允许未经身份验证的用户访问特定端点

我在这里努力应对Spring Security的基础知识。

我希望达到的目标

我的系统仅用于REST API处理,有一个登录端点POST /user/sign_in和几个打开的端点-GET /prompt/, /prompt/{id}, /story/, /story/{id},其余所有内容仅用于经过身份验证的用户。


我有一个自定义的身份验证过滤器,该过滤器已放在之前BasicAuthenticationFilter。我在这里共享我的WebSecurityConfigurerAdapter代码

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DemoAuthenticationProvider demoAuthenticationProvider;

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
                .antMatchers(HttpMethod.GET, "/version", "/story", "/prompt").permitAll()
                .antMatchers(HttpMethod.POST, "/user/sign_in").permitAll()
                .anyRequest().authenticated()
                .and()
                .addFilterBefore(new DemoAuthenticationFilter(), BasicAuthenticationFilter.class);
        http.csrf().disable();
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(demoAuthenticationProvider);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于开放端点的匿名用户,我在过滤器中返回了一个空的身份验证令牌,并且

403访问被拒绝

当我提到允许所有身份并且不仅仅针对那些端点进行身份验证时,为什么需要身份验证令牌?我该如何正确实施呢?

authentication rest spring spring-security spring-boot

6
推荐指数
1
解决办法
6287
查看次数