Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何查看按ID排序的RecyclerView项目?_Android_Android Recyclerview - Fatal编程技术网

Android 如何查看按ID排序的RecyclerView项目?

Android 如何查看按ID排序的RecyclerView项目?,android,android-recyclerview,Android,Android Recyclerview,在我的应用程序中,我有一个类似于菜单的东西,可以将存储在SharedReferences中的数据加载到构造函数中,并从它2RecyclerView的中构建 现在我想做的是,如果我按下底部的按钮,比如“CICCIO”在它的构造器中,ID设置为1,我希望在另一个recyclerView中,有很多彩色按钮可以可视化,只是在它们的构造器中,ID设置为1的按钮,但我对android不是很熟悉,我不知道如何创建这样的“排序方法” 我还没有在底部RecyclerView上设置onClick方法,我还没有从底部

在我的应用程序中,我有一个类似于菜单的东西,可以将存储在
SharedReferences
中的数据加载到构造函数中,并从它2
RecyclerView的
中构建

现在我想做的是,如果我按下底部的按钮,比如“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);

            }
        });