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

时间:2014-01-01 06:07:49

标签: android listview android-listview android-fragments expandablelistview

我在片段中有一个可扩展的列表视图,其中包含我有不同产品的部分。我在行动栏中有searchview,我在那里搜索产品。

现在我所做的是在加载listview时,我崩溃了所有组,现在当用户开始搜索产品时,我想过滤相应的组,我已经完成了,但结果是组没有得到扩展,(希望我不会让事情变得非常混乱......)

enter image description here

现在,我在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);
        }
    }

当我的片段在可扩展列表视图中加载数据时,我调用了collapseAll()方法。

现在,如果我在搜索产品时调用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();
    }

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

1 个答案:

答案 0 :(得分:4)

它将像The Unknown一样工作,如下文

  1. 从搜索中,找出目标群组位置/数量,说目标属于数据适配器中的n群组。

  2. 致电expListView.smoothScrollToPosition(n);

  3. 致电expListView.expandGroup(n);

  4. 这都不需要调用任何额外的方法。 SoftKey将保持在屏幕上。