Android列表视图SectionIndexer - 列表视图不显示curent滚动字母

时间:2011-09-20 12:25:51

标签: android listview indexer fastscroll

我正在尝试使用secionIndexer在列表视图中快速滚动。 我实施了但是 在滚动列表时,它应弹出我们滚动的当前字母, 但它没有显示出来。

在调试模式下我发现在我的情况下从不调用getSectipons()和getPositionForSection(), 但是在我尝试从网上尝试的任何其他简单例子中,它确实会调用这些函数。

Pelase建议我该怎么做 // ################## 这是我的适配器的代码

// #######################

public class MyListAdapter extends ArrayAdapter<Object> implements SectionIndexer {

    Activity context;
    Object[] listData;
    HashMap<String, Integer> alphaIndexer;
    String[] sections;

    public MyListAdapter(Activity context, Object[] objects) {
        super(context, R.layout.new_invest_row, objects);
        this.context = context;
        listData = objects;
        alphaIndexer = new HashMap<String, Integer>();
        //changes here

         ArrayList myArrayList = new ArrayList();
           for (int ix=0; ix<objects.length; ix++) {
               myArrayList.add(objects[ix]);
               }

           Collections.sort(myArrayList, new Comparator<HashMap<String, String>>(){ 
                public int compare(HashMap<String, String> one, HashMap<String, String> two) { 
                    return one.get("Name").compareToIgnoreCase(two.get("Name"));
                } 
        });

         listData = myArrayList.toArray();
        //Arrays.sort(listData);
        for (int i = listData.length - 1; i >= 0; i--) {
            final HashMap<String, String> obj = (HashMap<String, String>)listData[i];
            String element = obj.get("Name");
            alphaIndexer.put(element.substring(0, 1).toUpperCase(), i); 
        }

        Set<String> keys = alphaIndexer.keySet(); // set of letters

        // Copy into a List for sorting
        Iterator<String> it = keys.iterator();
        ArrayList<String> keyList = new ArrayList<String>(); 
        while (it.hasNext()) {
            String key = it.next();
            keyList.add(key);
        }
        Collections.sort(keyList);

        // Convert to array
        sections = new String[keyList.size()];
        keyList.toArray(sections);
        for(int c=0;c < sections.length;c++)Log.e("secction<"+c+">","+"+sections[c]);
        Log.e("alphaIndexer","+"+alphaIndexer);
    }

    static class ViewHolder {
        TextView txtName;
        TextView txtOwner;
        TextView txtStartDate;
        TextView txtEndDate;
        TextView txtStatus;
        ImageView imgIcon;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        View rowView = convertView;

        if (rowView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            rowView = inflater.inflate(R.layout.new_invest_row, null, true);
            holder = new ViewHolder();
            **holder.txtName = (TextView) rowView.findViewById(R.id.invest_row_name);**
//my custom code here

            rowView.setTag(holder);
        } else {
            holder = (ViewHolder) rowView.getTag();
        }

        @SuppressWarnings("unchecked")
        final HashMap<String, String> obj = (HashMap<String, String>)listData[position];

        String str = obj.get("Name");
        if(null == str){
            str = "";
        }
        holder.txtName.setText(str);

        //#################
               //my custom code here

        return rowView;
    }

    public int getPositionForSection(int section) {
        String letter = sections[section];
        Log.e("alphaIndexer.get(letter)","+"+alphaIndexer.get(letter));

        return alphaIndexer.get(letter);
    }

    public int getSectionForPosition(int arg0) {
        // TODO Auto-generated method stub
        return 1;
    }

    public Object[] getSections() {
        return sections;
    }
}

//#######################

我认为在适配器中,当我传递textViewId时,它不接受当前textVewId,因为sectionIndexer函数永远不会被调用。

在布局 new_invest_row 中,我得到的自定义行有一个图标和几个textViews。 我根据我在每行显示的对象的名称对列表进行排序。 我希望索引器处理对象的名称。

请帮我解决确切的问题

0 个答案:

没有答案