Вставить разделитель в listView - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть отсортированный по алфавиту список под названием songtitle, и я хочу вставить разделитель в это место в представлении списка.Как мне это сделать?

   adapter = new ArrayAdapter<String>(this,R.layout.song,songtitle);
              int l= 0;
              while(l < adapter.getCount()-1 ){
                  if(songtitle.get(l).charAt(0) == songtitle.get(l+1).charAt(0)){
                      adapter.add(songtitle.get(l));
                     }else{
                      ///Insert Divider Here ////////        
                           l++;
                  }
                 l++;
              }

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

переопределяет View getView(int position, View convertView, ViewGroup parent) из ArrayAdapter, чтобы дать вам другой вид (накачайте другой макет), где вы хотите, чтобы разделитель мог работать.

См. это руководство по переопределению метода getView.

Надеюсь, это поможет:)

0 голосов
/ 22 ноября 2011

Вы можете написать собственный адаптер. Затем вы можете переопределить getView, getItemViewType и getViewTypeCount и установить другой макет заголовка группы элементов Что-то вроде:

    public class TestArrayAdapter extends ArrayAdapter<String> {
    LayoutInflater mInflater;
    private static final int
        GROUP_START = 0,
        ITEM = 1,
        COUNT = 2;

    public TestArrayAdapter(Context context, String[] objects) {
        super(context, 0, objects);
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v;
        if (getItemViewType(position) == GROUP_START) {
            v = mInflater.inflate(R.layout.group_start, parent, false);
            ((TextView)v.findViewById(R.id.item_group_header)).setText(
                    Character.toString(getItem(position).charAt(0)));
        } else {
            v = mInflater.inflate(R.layout.item, parent, false);
        }
        ((TextView)v.findViewById(R.id.text)).setText(getItem(position));
        return v;
    }

    @Override
    public int getItemViewType(int position) {
        if (position == 0) return GROUP_START;
        return (getItem(position).charAt(0) == getItem(position - 1).charAt(0)) ?
                ITEM : GROUP_START; 
    }

    @Override
    public int getViewTypeCount() {
        return COUNT;
    }
}
...