无法从 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 设置边距?
我在 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 设置边距?