Android 如何查看按ID排序的RecyclerView项目?
在我的应用程序中,我有一个类似于菜单的东西,可以将存储在Android 如何查看按ID排序的RecyclerView项目?,android,android-recyclerview,Android,Android Recyclerview,在我的应用程序中,我有一个类似于菜单的东西,可以将存储在SharedReferences中的数据加载到构造函数中,并从它2RecyclerView的中构建 现在我想做的是,如果我按下底部的按钮,比如“CICCIO”在它的构造器中,ID设置为1,我希望在另一个recyclerView中,有很多彩色按钮可以可视化,只是在它们的构造器中,ID设置为1的按钮,但我对android不是很熟悉,我不知道如何创建这样的“排序方法” 我还没有在底部RecyclerView上设置onClick方法,我还没有从底部
SharedReferences
中的数据加载到构造函数中,并从它2RecyclerView的
中构建
现在我想做的是,如果我按下底部的按钮,比如“CICCIO”在它的构造器中,ID设置为1,我希望在另一个recyclerView
中,有很多彩色按钮可以可视化,只是在它们的构造器中,ID设置为1的按钮,但我对android不是很熟悉,我不知道如何创建这样的“排序方法”
我还没有在底部RecyclerView
上设置onClick
方法,我还没有从底部RecyclerView
构造函数和顶部RecyclerView上设置方法getID
下面是我活动的代码:
// Builder del BOTTOM recyclerView
public void buildRecyclerViewMenu(){
RecyclerView mRecyclerView = findViewById(R.id.recyclerViewMenu);
mRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
RecyclerViewMenu recyclerViewMenu = new RecyclerViewMenu(menuConstructors);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(recyclerViewMenu);
recyclerViewMenu.setOnItemClickListener(new RecyclerViewMenu.OnItemClickListener() {
@Override
public void onItemClick(int position) {
}
});
}
// Builder del TOP recyclerView
public void buildRecyclerView(){
mRecyclerViewBOT = findViewById(R.id.recyclerView);
mRecyclerViewBOT.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 4);
Adapter mAdapter = new Adapter(items);
mRecyclerViewBOT.setLayoutManager(mLayoutManager);
mRecyclerViewBOT.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new Adapter.OnItemClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onItemClick(final int position) {
}
});
}
这里是我将数据加载到底部和顶部RecyclerView的方法
private void loadDataMenu(){
new ArrayList<MenuConstructor>();
SharedPreferences sharedPreferences = getSharedPreferences("MENU_SAVE", MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString("menu list",null);
Type type = new TypeToken<ArrayList<MenuConstructor>>() {}.getType();
menuConstructors = gson.fromJson(json, type );
if(menuConstructors == null){
menuConstructors = new ArrayList<>();
Toast.makeText(cassa.this,"NESSUN TASTO DA VISUALIZZARE" ,Toast.LENGTH_SHORT).show();
}
}
private void loadDataTasti(){
new ArrayList<Item>();
SharedPreferences sharedPreferences = getSharedPreferences("TASTI_SAVE", MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString("tasti list",null);
Type type = new TypeToken<ArrayList<Item>>() {}.getType();
items = gson.fromJson(json, type );
if(items == null){
items = new ArrayList<>();
Toast.makeText(cassa.this,"NESSUN TASTO DA VISUALIZZARE" ,Toast.LENGTH_SHORT).show();
}
}
}
这是MenuConstructor(底部回收视图)的模型
公共类菜单构造函数{
int id;
private String deskT;
private String sfondo;
private String font;
MenuConstructor(int idID,String Desk,String Sfondo,String Font){
id = idID;
deskT = Desk;
sfondo = Sfondo;
font = Font;
}
public int getBtnID(){
return id;
}
public String getDesk(){
return deskT;
}
public String getSfondoColor(){
return sfondo;
}
public String getFontColor(){
return font;
}
}
因此,我想将MenuConstructor中的id与Item.java中的菜单(id)进行比较,并仅显示具有特定id的项。您可以使用Collections.sort()
私有列表getSortedItems(列表项){
Collections.sort(items,newcomparator(){
@凌驾
公共整数比较(项目、项目下一项){
返回ComparisonChain.start()
.compare(item.getMenu(),nextItem.getMenu())
.result();
}
});
退货项目;
}
此方法将返回项目列表
排序依据菜单
希望通过创建一个新的ArrayList并在一个for循环中比较item.getMenu()和menuConstructors.getBtnID()来解决这个问题,该循环滚动ArrayList的相同长度
recyclerViewMenu.setOnItemClickListener(new RecyclerViewMenu.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(cassa.this,String.valueOf(menuConstructors.get(position).getBtnID()),Toast.LENGTH_SHORT).show();
ArrayList<Item> filteredList = new ArrayList<>();
for(Item item : items) {
if(item.getMenu() == menuConstructors.get(position).getBtnID() ) {
filteredList.add(item);
}
}
mAdapter.filterList(filteredList);
}
});
recyclerViewMenu.setOnItemClickListener(新的recyclerViewMenu.OnItemClickListener(){
@凌驾
公共空间单击(内部位置){
Toast.makeText(cassa.this,String.valueOf(menuConstructors.get(position.getBtnID()),Toast.LENGTH_SHORT.show();
ArrayList filteredList=新建ArrayList();
用于(项目:项目){
if(item.getMenu()==menuConstructors.get(position.getBtnID()){
filteredList.add(项目);
}
}
mAdapter.filterList(filterList);
}
});
您可以使用集合。排序
来解决问题。但是我不知道你的适配器使用的模型类,你能提供它吗?i@gianhtran添加了top recyclerView的modelclass Bottom recyclerView模型几乎和我得到的一样,因此,请检查我的回答事实上该项目是一个ArrayList,如果我没有错的话,这将比较项目并按ID对其排序,当我想比较两个不同型号的项目时,只显示菜单中值等于ID中设置的值的项目(我还添加了另一个型号),我的意思是我单击“CICCIO”ID为1,在顶部的recyclerView中必须有一个可视按钮,该按钮的菜单设置为1。因此,首先,您应该根据您的条件筛选您的项目,然后,按照上述方法进行排序,如果需要,您可以使用ArrayList而不是List
private List<Item> getSortedItems(List<Item> items) {
Collections.sort(items, new Comparator<Item>() {
@Override
public int compare(Item item, Item nextItem) {
return ComparisonChain.start()
.compare(item.getMenu(), nextItem.getMenu())
.result();
}
});
return items;
}
recyclerViewMenu.setOnItemClickListener(new RecyclerViewMenu.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(cassa.this,String.valueOf(menuConstructors.get(position).getBtnID()),Toast.LENGTH_SHORT).show();
ArrayList<Item> filteredList = new ArrayList<>();
for(Item item : items) {
if(item.getMenu() == menuConstructors.get(position).getBtnID() ) {
filteredList.add(item);
}
}
mAdapter.filterList(filteredList);
}
});