Android - SeparatedListAdapter - 如何在 onClick 上获得准确的项目位置?

标签 android

我正在使用 Sharkey 的 SeparatedListAdapter 类,以便拥有一个按部分分隔的 ListView。

类(class)效果很好,但我遇到的问题是我的 onListItemClick()处理程序。如果我有以下分区列表:

---------
| A     |
---------
| Alex  |
| Allan |
---------
| B     |
---------
| Barry |
| Bart  |
| Billy |
| Brian |
---------
| C     |
---------
etc...

当你想点击列表中的一个项目时,你会得到 position项目,然后用它做一些事情。

在我的例子中,我的列表是人名的动态列表。这些名称来自一个数据库,该数据库被放入 List<CustomClass> 中。在进入列表之前。知道我点击的项目的位置对我来说很重要,因为我使用项目 position以确定有关 List 对象中的人的其他信息。

现在的问题是: 当您单击列表中的项目时,标题将被视为项目,即使它们是不可单击的。在上面的例子中,列表中的位置如下

Alex = 1
Allan = 2
Barry = 4
Bart = 5
Billy = 6
Brian = 7

但在我原来的List对象顺序是这样的

Alex = 0
Allan = 1
Barry = 2
Bart = 3
Billy = 4
Brian = 5

所以每当我点击一个项目,比如 Alex,我的代码就会运行 onClick处理程序,确定 Alex 在位置 1然后从 List 中检索 Allans 信息而不是 Alex 的。

你看到这里的 delima 了吗?我应该采取什么方法来解决这个问题?

最佳答案

您可以对 listView 中的每个项目使用 setTag()。这可以通过在从 listAdapter 中的 getView() 函数返回 View 之前添加此标记来完成。假设您的列表适配器返回 convertView ,然后在列表适配器中。

    public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null)
            {
                convertView = mLayoutInflater.inflate(R.layout.morestores_list_item, null);
                holder = new ViewHolder();

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            // populate holder here, that is what you get in onItemClick.
                    holder.mNameofItem = "NameofaPerson";
            return convertView;
        }

static class ViewHolder {
        TextView mName;
        Button mAction;
        ImageView mLogo;
            // use this class to store the data you need, and use appropriate data types.
            String mNameofItem.
    }

当你点击列表项时,使用

public void onItemClick(AdapterView<?> arg0, View convertView, int arg2,
            long arg3) {
                ViewHolder holder = (ViewHolder) convertView.getTag();
                // holder has what ever information you have passed.
                String nameofItemClicked = holder.mNameofItem;
                // access the information like this.
    }

这种方法不需要项目在列表中的位置,只是想让你知道不同的方法。

HTH.

关于Android - SeparatedListAdapter - 如何在 onClick 上获得准确的项目位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522454/

相关文章:

android - 膨胀类 android.support.v7.widget.RecyclerView(Eclipse) 时出错

android - 以编程方式而不是手指使用 ViewPager 滑动图像

android - Proguard 和 RxAndroid V1.1.0

java - Xamarin Android Theme.AppCompat 异常

android - 如何使用共享首选项保存图像路径

java - Android Foursquare accessToken : How to get accessToken from inner class?

android - 如何在Android中使用MPAndroidChart使用两组数据绘制图形

android - 水平图像库 - 空白 : nowrap messing up max-height: 100% on Firefox for Android

Android 相当于 CocoaPods Pods-Acknowledgements.plist?

android - minifiedEnabled 导致渲染脚本崩溃 >Kitkat