其他分享
首页 > 其他分享> > 从搜索视图搜索时,在可扩展列表视图中扩展组

从搜索视图搜索时,在可扩展列表视图中扩展组

作者:互联网

我有一个可扩展的listview片段,其中包含一节,在该节下我有不同的产品.我在操作栏上有searchview,可以从那里搜索产品.

现在我要做的是在加载列表视图时折叠所有组,现在当用户开始搜索产品时,我想过滤各自完成的组,但结果是该组没有得到扩展,(希望我不会让事情变得很混乱…)

现在,我在搜索视图中搜索产品名称“ sony”,并得到了过滤结果,但组没有扩展,我想扩展组并显示相关组下的产品名称.

我创建了这两种方法:

private void expandAll()
    {
        int count = listAdapter.getGroupCount();
        for (int i = 0; i < count; i++)
        {
            expListView.expandGroup(i);
        }
    }

    private void collapseAll()
    {
        int count = listAdapter.getGroupCount();
        for (int i = 0; i < count; i++)
        {
            expListView.collapseGroup(i);
        }
    }

当我的片段将数据加载到可扩展列表视图中时,我调用了crashAll()方法.

所以现在,如果我在搜索产品时调用了expandAll()方法,但未获得预期的结果.

这就是我过滤列表的方式:

public void filterData(String query)
        {
            //query = query.toLowerCase();
            //query=query;

            ArrayList<ProSectionName> filterProSectionNames=prepareFilterListData(query);

            if(query.isEmpty())
            {
                if(txtNoProductMessage.getVisibility()==View.VISIBLE)
                {
                    txtNoProductMessage.setVisibility(View.GONE);
                }

                listDataHeader.addAll(mNewTopupGroupCollection);
            }

            if(filterProSectionNames!=null && filterProSectionNames.size()>0)
            {
                if(txtNoProductMessage.getVisibility()==View.VISIBLE)
                {
                    txtNoProductMessage.setVisibility(View.GONE);
                }

                listDataHeader.clear();

                for(ProSectionName proSectionName : mNewSectionGroupCollection)
            {
                ArrayList<ProSectionName.Products> productList = proSectionName.getProductList();
                ArrayList<ProSectionName.Products> newProductList = new ArrayList<ProSectionName.Products>();

                for(ProSectionName.Products products : productList)
                {
                    if(products.getProductName().toLowerCase().contains(query.toLowerCase()) ||products.getProductName().toLowerCase().contains(query.toLowerCase()))
                    {
                        newProductList.add(products);
                    }
                }

                if(newProductList.size() > 0)
                {
                    ProSectionName proSectionName = new ProSectionName(ProSectionName.getsectionName(),newProductList);
                    listDataHeader.add(topupSectionName);
                    //expandAll();
                }
                else
                {
                    txtNoProductMessage.setVisibility(View.VISIBLE);
                    txtNoProductMessage.setText("No Match Found...");
                }
            }
            //Log.v("MyListAdapter", String.valueOf(topupProducts.size()));
        }
        else
        {
            txtNoProductMessage.setVisibility(View.VISIBLE);
            txtNoProductMessage.setText("No Match Found...");
        }
        notifyDataSetChanged();
    }

我面临的问题是,当我在filterdata()中调用expandAll()时,列表组已正确展开,但软键盘消失了.我也想将键盘保持在那里,直到用户按下.

解决方法:

它将按照《未知》的指示工作

>从搜索中找出目标的组位置/数量,例如目标在您的数据适配器中属于n个组.
>调用expListView.smoothScrollToPosition(n);
>调用expListView.expandGroup(n);

不需要调用任何其他方法.软键将保持原样显示在屏幕上.

标签:android-fragments,listview,android-listview,expandablelistview,android
来源: https://codeday.me/bug/20191030/1964704.html