【问题标题】:After filter a listview,how can I obtain the position of the first listview?过滤列表视图后,如何获取第一个列表视图的位置?
【发布时间】:2013-05-06 06:55:34
【问题描述】:

过滤列表视图后,如何获取第一个列表视图的位置? 我使用 simpleadapter 来填充列表视图。 数据源中的每个项目都有自己的 id,我使用“case”来重定向它们。 过滤列表视图后,我不知道如何将后面的项目与第一个列表视图相关联。位置和 ID 已更改。 谢谢。

我使用 EditTextView 的 afterTextChanged 过滤列表视图并通知它。
            @Override
        public void afterTextChanged(Editable paramEditable) {

            listItemsCopy.clear();
            int count=simpleAdapter.getCount();
            if ((count>0 )&&paramEditable.length()>0) {
                for (int i = 0; i < simpleAdapter.getCount(); i++) {
                    Map<String,Object> tempMap=(Map<String,Object>)simpleAdapter.getItem(i);
                    String itemName=tempMap.get("name").toString();
                    HashMap<String, Object> tempHashMap=new HashMap<String, Object>();
                    int copyCount=0;
                    if(itemName.toLowerCase().contains(paramEditable.toString().toLowerCase())){

                        tempHashMap=(HashMap<String, Object>)simpleAdapter.getItem(i);
                        listItemsCopy.add(tempHashMap);

                        copyCount++;
                    }
                }                       

        if(listItemsCopy!=null){
        Handler handler=new Handler();
        handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                simpleAdaptercopy = new SimpleAdapter(getActivity(),
                        listItemsCopy, R.layout.right_menu_list_view, new String[] {
                                "name", "id", "image" }, new int[] {
                                R.id.rightMenuListViewTextView1,
                                R.id.rightMenuListViewTextView2,
                                R.id.rightMenuListViewImageView1 });

                simpleAdapter.setViewBinder(new ViewBinder() {

                    @Override
                    public boolean setViewValue(View view, Object data,
                            String textRepresentation) {
                        if ((view instanceof ImageView && data instanceof Bitmap)) {
                            ImageView iv = (ImageView) view;
                            iv.setImageBitmap((Bitmap) data);
                            return true;
                        } else {
                            return false;
                        }
                    }
                });
                listView.setAdapter(simpleAdaptercopy);
                simpleAdapter.notifyDataSetChanged();


                                }
        }, 1000);
        }
            }
            else {
                listView.setAdapter(simpleAdapter);
                simpleAdapter.notifyDataSetChanged();
            }
        }

然后我想使用listview的onItemClick方法来重定向不同的Intent。由于数据源发生了变化,位置和id都与我想要的不同

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Intent intent = null;
            switch (position) {}`

【问题讨论】:

  • 将您的来源发布为您尝试过的内容以及您遇到的部分
  • @SankarV 我在上面编辑了一些代码。
  • @CRUSADER 我卡在 onItemClick 的方法中

标签: android listview filter simpleadapter


【解决方案1】:

我喜欢三个数组。仅测试代码:

String positionString[]=new String[22];
                int latterPosition[]=new int[22];
                for (int i = 0; i < latterPosition.length; i++) {
                    positionString[i]="";
                    latterPosition[i]=0;
                }
                int latterCount=0;
                for (int i = 0; i < positions.length; i++) {
                    if (positions[i]==10) {
                        positionString[latterCount]=i+"";
                        latterPosition[latterCount]=10;
                        latterCount++;
                    }
                }

【讨论】:

    【解决方案2】:

    发生这种情况是因为 Android 只为您提供当前看到的项目的 ID + 可能两个隐藏在按钮上,两个隐藏在顶部。

    this 教程中,您可以看到如何使用模型创建 ListView,这对我有帮助,当我之前遇到这个问题时。将此添加到您的代码并更改它(我认为您不需要复选框)。

    【讨论】:

    • 我喜欢它与三个数组。仅测试代码:String positionString[]=new String[22]; int latterPosition[]=new int[22]; for (int i = 0; i &lt; latterPosition.length; i++) { positionString[i]=""; latterPosition[i]=0; } int latterCount=0; for (int i = 0; i &lt; positions.length; i++) { if (positions[i]==10) { positionString[latterCount]=i+""; latterPosition[latterCount]=10; latterCount++; } }
    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多