0

我有一个带有 2 个部分的 SeperatedListAdapter,每个部分有 6 个项目。

代码:

listView.setAdapter(adapter);
listView.setOnItemClickListener(listViewListener);

以这种方式添加节标题和项目:

adapter = new SeparatedListAdapter(this);
adapter.addSection(entry.getKey(), new ItemAdapter(this, 0, topics.toArray(array)));

OnItemClickListener listViewListener = new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long duration) {
          Employee emp = emps.get(position - 1); 
    }
};

我有 ArrayList 作为:

items from section 1
    Anand - 0
    Sunil - 1
    Suresh - 2
    Dev - 3
    Faran - 4
    Khan - 5
items from section 2
    Samba - 6
    Surendra - 7
    Rajesh - 9
    Rakesh - 10
    Satish - 11

现在,OnItemClickListener当我获得职位时,它也将节标题作为职位。

所以我这样做了,Employee emp = emps.get(position - 1);但最多 6 个项目(我的数组列表中的 0-5 个)很好,但之后位置不合适。我该如何解决这个问题?

我需要以这种方式将位置传递给我的数组列表

Employee emp = emps.get(position - 1);

因为我会将员工对象传递给另一个类。

也看到这个:

Android - 分离列表适配器 - 如何在 onClick 上获得准确的项目位置?

4

1 回答 1

1

正如您在评论中提到的那样,您正在使用Android 0.9示例中的带有标题的分隔列表。

所以有一种进入adpater的方法,

public Object getItem(int position) {  
        for(Object section : this.sections.keySet()) {  
            Adapter adapter = sections.get(section);  
            int size = adapter.getCount() + 1;  

            // check if position inside this section   
            if(position == 0) return section;  
            if(position < size) return adapter.getItem(position - 1);  

            // otherwise jump into next section  
            position -= size;  
        }  
        return null;  
    }  

返回正确的项目。

所以你只需要调用这个方法,变成OnItemClickListenerlike

OnItemClickListener listViewListener = new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long duration) {
            Employee emp = (Employee) adapter.getItem(position); // HERE is the code to get correct item.
}
};

将以下方法添加到SeparatedListAdapter

public Employee getItem(int position, ArrayList<Employee> lists) {  
        for(Object section : this.sections.keySet()) {  
            Adapter adapter = sections.get(section);  
            int size = adapter.getCount() + 1;  

            // check if position inside this section   
            if(position == 0) return lists.get(position);   
            if(position < size) return lists.get(position - 1);  

            // otherwise jump into next section  
            position -= size;  
        }  
        return null;  
    }  

并将其称为

Employee emp = adapter.getItem(position, emps);
于 2013-10-04T05:48:34.760 回答