如何以编程方式更改 RecyclerView 中项目的位置?
How to change position of items in RecyclerView programmatically?
有没有办法以编程方式使用 LinearLayoutManager
将特定项目移动到 RecyclerView
中的特定位置?
你可以这样做:
一些Activity/Fragment/Whatever:
List<String> dataset = new ArrayList<>();
RecyclerView recyclervSomething;
LinearLayoutManager lManager;
MyAdapter adapter;
//populate dataset, instantiate recyclerview, adapter and layoutmanager
recyclervSomething.setAdapter(adapter);
recyclervSomething.setLayoutManager(lManager);
adapter.setDataset(dataset);
我的适配器:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> dataset;
public MyAdapter() {}
//implement required methods, extend viewholder class...
public void setDataset(List<String> dataset) {
this.dataset = dataset;
notifyDataSetChanged();
}
// Swap itemA with itemB
public void swapItems(int itemAIndex, int itemBIndex) {
//make sure to check if dataset is null and if itemA and itemB are valid indexes.
String itemA = dataset.get(itemAIndex);
String itemB = dataset.get(itemBIndex);
dataset.set(itemAIndex, itemB);
dataset.set(itemBIndex, ItemA);
notifyDataSetChanged(); //This will trigger onBindViewHolder method from the adapter.
}
}
有没有办法以编程方式使用 LinearLayoutManager
将特定项目移动到 RecyclerView
中的特定位置?
你可以这样做:
一些Activity/Fragment/Whatever:
List<String> dataset = new ArrayList<>();
RecyclerView recyclervSomething;
LinearLayoutManager lManager;
MyAdapter adapter;
//populate dataset, instantiate recyclerview, adapter and layoutmanager
recyclervSomething.setAdapter(adapter);
recyclervSomething.setLayoutManager(lManager);
adapter.setDataset(dataset);
我的适配器:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> dataset;
public MyAdapter() {}
//implement required methods, extend viewholder class...
public void setDataset(List<String> dataset) {
this.dataset = dataset;
notifyDataSetChanged();
}
// Swap itemA with itemB
public void swapItems(int itemAIndex, int itemBIndex) {
//make sure to check if dataset is null and if itemA and itemB are valid indexes.
String itemA = dataset.get(itemAIndex);
String itemB = dataset.get(itemBIndex);
dataset.set(itemAIndex, itemB);
dataset.set(itemBIndex, ItemA);
notifyDataSetChanged(); //This will trigger onBindViewHolder method from the adapter.
}
}