无法从 RecyclerView 的 onBindViewHolder 更改根视图的大小或位置

Cannot change root view's size or position from RecyclerView's onBindViewHolder

我在 android 项目中使用 RecyclerView。今天,当调用适配器的 onBindViewHolder 时,我不得不更改 RecyclerView 的右边距(或高度和宽度或位置......任何东西)。

但是我只是 运行 解决了 RecyclerView(或 RecyclerView 之外的任何视图)的大小或位置或边距的问题...未从适配器的 onBindViewHolder(或适配器中的任何方法)方法更改。

我尝试了很多方法,但都没有成功。谁能告诉我我错过了什么? :(

这是我的代码。

代码

public class DataDashboardFragment extends Fragment {
    private RecyclerView rvDashboard = null;
    private DataDashboardAdapter adapter = null;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.data_dashboard, container, false);
        
        rvDashboard = (RecyclerView) v.findViewById(R.id.data_dashboard);
        adapter = new DataDashboardAdapter();
        rvDashboard.setAdapter(adapter);

        // Here I add items which extracted from SQLite DAO.
        List<DailyDataUsage> items = SomeDAO.getItems();

        adapter.clear();
        adapter.addAll(items);
        adapter.NDSC();

        return v;
    }

    ...

    // Adapter
    public class DataDashboardAdapter extends Adapter<DataDashboardViewHolder> {
        private List<DailyDataUsage> items = new ArrayList<DailyDataUsage>();

        ...

        public void clear() {
            this.items.clear();
        }

        public void NDSC() {
            // Some edits of data before notifyDataSetChanged.
            ...
            super.notifyDataSetChanged();
        }

        public void addAll(Collection<? extends DailyDataUsage> items) {
            this.items.addAll(items);
        }

        @Override
        public void onBindViewHolder(DataDashboardViewHolder holder, int position) {

            // rvDashboard's right margin won't be changed :(
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) rvDashboard.getLayoutParams();
            int rightMargin = 500;
            params.setMargins(0, 0, rightMargin, 0);
            rvDashboard.setLayoutParams(params);
            rvDashboard.requestLayout();

        }
    }

    // ViewHolder
    public static class DataDashboardViewHolder extends ViewHolder {
        ...
    }

}

任何建议或类似经验将不胜感激!

P.S。它从片段的 onCreateView 方法(可能是创建视图之前的一些方法)开始工作。

实际上,您可以在 onBindViewHolder 方法中更改 onCreateView 方法,您可以将边距设置为 holder 元素或适配器的总布局,而不是 RecyclerView 。实际上为什么你需要在 onBindViewHolder 为 RecyclerView 设置边距?