小编Gak*_*ak2的帖子

水平RecyclerView与具有动态高度的项目

所以我需要一个水平的RecyclerView.但是,它们中的项目具有基于从后端返回的动态高度.

RecyclerView及其项目的高度为"wrap_content"

问题是如果RecyclerView中的第一个可见项很小,那么当用户滚动到较大的项目时,它们会被切断.

理想情况下,我们希望RecyclerView足够大以容纳组中的最大项目(但只有最大的现有项目......而不是假设最大的项目).RecyclerView动态改变其高度也是可以接受的.

我写了一个示例应用程序来说明问题.在这个应用程序中,我们有一个水平列表.前33个项目应显示1行文本,而下一个应显示3行文本,最后34个应显示2行.但是,它们都显示1行,因为RecyclerView的高度不会改变.

我试过从onBindViewHolder()调用RecyclerView(和TextView)上的requestLayout(),但似乎没有做任何事情.

主要活动:

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAdapter = createAdapter();

        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
        mRecyclerView.setAdapter(mAdapter);
    }

    private RecyclerView.Adapter<ViewHolder> createAdapter() {
        RecyclerView.Adapter adapter = new RecyclerView.Adapter<ViewHolder>() {
            @Override
            public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
                return new ViewHolder(v);
            }

            @Override
            public void onBindViewHolder(ViewHolder holder, int position) {
                if (position < …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

19
推荐指数
1
解决办法
2265
查看次数

如何在 Jetpack Compose 中制作从 Alignment.Start 到 Align.End 的动画?

希望这是一个简单的问题,但是任何人都知道如何根据对齐方式对可组合项的位置进行动画处理,例如从 Alignment.Start 到 Alignment.End ?

android android-animation android-jetpack android-jetpack-compose

11
推荐指数
3
解决办法
4363
查看次数

FusedLocationProvider - 如果位置模式为“仅设备”,有什么方法可以获取位置?

我一直在玩 FusedLocationProvider,我发现如果您手机的定位模式设置为“仅设备”(在设置中更改 - 这意味着仅启用 GPS 定位。不使用 Wifi 网络和手机信号塔来提高准确性),然后我找不到 FusedLocationProvider 为您提供位置而不要求用户将其更改为 High Accuracy(始终调用 onResolutionRequired)的方法。

所有四个 LocationRequest 优先级都不起作用:

  1. PRIORITY_HIGH_ACCURACY - 要求切换到“高精度”定位模式
  2. PRIORITY_BALANCED_POWER_ACCURACY - 同上
  3. PRIORITY_LOW_POWER - 同上
  4. PRIORITY_NO_POWER - 只是没用

如果设备处于此模式,是否无法通过 FusedLocationProvider 获取位置?我很确定您可以通过 android.location.LocationManager 获得它。如果这意味着在它之上进行更好的抽象,这似乎是一个巨大的设计缺陷。

android android-location google-play-services

5
推荐指数
1
解决办法
1444
查看次数

为RelativeLayout中的膨胀视图设置参数,但获取classcastexception

嗨,我正在尝试使用inflater以编程方式添加布局(这是一个简单的TextView).膨胀视图的父级是ScrollView中的RelativeLayout.我的问题是我正在尝试使用params.addRule和view.setLayoutParams()将新视图放在其标题下(在RelativeLayout中),但是我得到了一个转发异常:11-12 13:06:57.360: E/AndroidRuntime(10965): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams,即使是父视图view显然是一个RelativeLayout.有什么想法吗?

我在想它是因为RelativeLayout嵌套在一个scrollview中,但我不明白为什么它会这样做,因为我添加的视图的直接父级是RelativeLayout.

    _innerLayout = (RelativeLayout) findViewById(R.id.innerRelativeLayout);
    LayoutInflater inflater = (LayoutInflater)this.getLayoutInflater();

    View view = inflater.inflate(R.layout.comments, _innerLayout);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.BELOW, R.id.commentsHeader);
    view.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)

android android-layout

3
推荐指数
1
解决办法
2093
查看次数