相关疑难解决方法(0)

我们什么时候使用recyclerView.setHasFixedSize?

事情是这样的:有人知道setHasFixedSize方法吗?有人说如果所有项目大小都相同,它允许进行优化,而在android.support.v7.widget的RecyclerView类中,它评论如下:如果事先可以知道适配器内容的变化,RecyclerView可以执行多次优化无法改变RecyclerView本身的大小.如果您使用RecyclerView属于此类别,请将此设置为true.

那是什么意思?有人能告诉我使用它的背景或解释上面"这个类别"的含义吗?非常感谢.

android

28
推荐指数
1
解决办法
2万
查看次数

水平 RecyclerView 跟随第一个项目高度和 wrap_content

我有一个RecyclerView水平布局。各个适配器项目的高度可以取决于项目的内容。

所以理论上它可以如下所示:

在此处输入图片说明

我现在的问题是它wrap_content似乎只关心第一个问题的高度,因为我得到的结果是这样的:

在此处输入图片说明

如您所见,第 4 项被切断。但是,如果我把最高的项目放在第一位,它就可以完美地工作。

并摆脱明显的解决方案;我不知道物品的高度。我只能在测试期间这样做。

——

适配器项.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:animateLayoutChanges="true"
    android:padding="@dimen/padding_view_small">

    <ImageView
        android:id="@+id/image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        app:srcCompat="@drawable/flamme"/>

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:layout_marginTop="@dimen/padding_view_small"
        android:text="@string/placeholder"
        android:gravity="center_horizontal"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

父文件

<LinearLayout
    android:id="@+id/symbol_list_parent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/container_content"
    android:padding="@dimen/padding_view_normal">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/symbol_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

活动.java

...
final ProductPictogramAdapter symbolAdapter = new ProductPictogramAdapter();
final View symbolListParent = findViewById(R.id.symbol_list_parent);
RecyclerView symbolList = findViewById(R.id.symbol_list);
symbolList.setLayoutManager(new LinearLayoutManager(ProductDetailActivity.this, LinearLayoutManager.HORIZONTAL, false));
symbolList.setAdapter(symbolAdapter);
symbolList.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

21
推荐指数
1
解决办法
2755
查看次数

notifyItemChanged()使RecyclerView滚动并跳转到UP

我有一个带有适配器的RecycleView,它显示了一个服务器列表,用户必须选择一个服务器.

当我在onClick()方法中调用notifyItemChanged(previousPosition)以使旧服务器未被选中并选择新服务器时,这使得RecycleView列表完全跳到列表中间.

当我点击RecycleView列表中最后2或3个服务器之一时,会发生此问题

这是我的RecyclerView.Adapter的代码:

public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ServerViewHolder> {

    private List<Server> listServers = new ArrayList<>();
    private int[] icons = new int[]{R.drawable.server1,R.drawable.server2,R.drawable.server3,R.drawable.server4,R.drawable.server5,R.drawable.server6,R.drawable.offline};
    private int selected = 0;
    private int previousSelected = 0;

    public ServerAdapter(List<Server> listServers){
        this.listServers = listServers;
    }

    @Override
    public ServerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.server_relative_layout,parent,false);
        return new ServerViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ServerViewHolder holder, final int position) {
        if(position == selected){
            holder.getBackground().setSelected(true);
        }else{
            holder.getBackground().setSelected(false);
        }
        holder.getBackground().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

12
推荐指数
3
解决办法
6768
查看次数

停止滚动父级 (NestedScrollview) 滚动子级 (RecyclerView) 时

我需要类似于此实现的行为但 NestedScrollView 将是父级, RecyclerView 将是 NestedScrollView 的子级。

例如:https : //medium.com/widgetlabs-engineering/scrollable-nestedscrollviews-inside-recyclerview-ca65050d828a

我不确定它是否可以实现。尝试在 child(RV) 滚动时禁用 parent(NSV),但是在 child 上滚动会滚动整个视图,包括 parent。

android android-scrollview android-recyclerview android-nestedscrollview

10
推荐指数
1
解决办法
3278
查看次数

致命 lint 错误:为什么将 recyclerView.setHasFixedSize(true) 与 wrap_content 一起用于滚动方向的大小会产生致命 lint 错误?

在尝试生成签名的 APK 以便发布时。我发现以下错误。

在此输入图像描述

这个错误是在我将 Android Studio 更新到 4.1.3 后才出现的。

在此输入图像描述

经过检查,我发现 recyclerView.setHasFixedSize(true) 如果与 wrap_content 一起使用以获取滚动方向的大小,则会出现致命的 lint 错误。我已经通过在所有活动中删除该行来解决它,但我仍然需要知道为什么这个错误现在是致命的,更新之前没有这样的错误。

lint fatal-error apk android-studio android-recyclerview

6
推荐指数
2
解决办法
1889
查看次数

何时使用 RecyclerView setHasFixedSize(true)?

我已经阅读了 Android 开发人员信息以及许多 SO 帖子和 RecyclerView 文章。我仍然不清楚我是否可以使用:

recyclerView.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud)

我的 RecyclerView 列表中的方法。随着 CardView 项目随着时间的推移动态添加和删除,我的 RecyclerView 列表的大小将不断变化。但是,每个 CardView 的大小(高度和长度)是固定的。请指教。

android android-cardview android-recyclerview

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

RecyclerView显示相同的项目

我正在尝试实现RecyclerView,显示来自JSONArray的数据.解析工作完美,但RecyclerView在每个项目中显示必须仅在最后一项中的信息.屏幕截图清楚地表明了这一点.

这是我的代码:

MainActivity.java

public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;

protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
    new parseTask().execute();
}

private class parseTask extends AsyncTask<Void, Void, String> {

    HttpURLConnection urlConnection = null;
    BufferedReader reader = null;
    String resultJson = "";
    ProgressDialog pdLoading = new ProgressDialog(MainActivity.this, R.style.MyDialogStyle);

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pdLoading.setMessage("\tLoading...");
        pdLoading.setCancelable(false);
        pdLoading.show();
    }

    @Override
    protected String doInBackground(Void... params) {
        try {
            URL url = new URL("http://songo.eu.pn/db_GetFromSongs.php");
            urlConnection = …
Run Code Online (Sandbox Code Playgroud)

java android recycler-adapter android-recyclerview

0
推荐指数
1
解决办法
1715
查看次数