AndroidのListViewに関する質問です。

http://www.breakingwap.com/wp-content/uploads/8924-a.sc.jpg

上のリンクのようなNavigationDrawerでなおかつ、この画像でいう、アイコンやメールアドレスがある部分とFooterに当たる部分をNavigationDrawerの上部、下部に固定したレイアウトを作りたいと思いまして、以下のようなレイアウトで書いたのですが、例えば、縦画面などで、ListViewをスクロールする必要がなく、要素がすべて表示されるときには、正しく表示されるのですが、横画面などでListViewのスクロールが必要なときにスクロールをするたびにそのListViewの順番が変わってしまいます。

NavigationDrawerのレイアウトの概略

<LinearLayout>
  <RelativeLayout>
      //View
  </RelativeLayout>
  <ListView
      android:layout_weight="1"
  </ListView>
  <LinearLayout>
      //View
  </LinearLayout>
</LinearLayout

また、以下のサイトを参考にしました。
http://d.hatena.ne.jp/windbell/20120701
http://d.hatena.ne.jp/nkawamura/20130818/1376815735

回答よろしくお願いします。

追記(リストアダプター)

//ListViewのViewHolder
    private static class ViewHolder{
        TextView textView;
        ImageView imageView;
        LinearLayout itemParent;
    }

    //ListViewのItemデータ
    private class NavigationDrawerItem {
        public String text;
        public int icon;

        public NavigationDrawerItem(String text, int icon){
            this.text=text;
            this.icon=icon;
        }
    }

    //CustomArrayAdapter
    private class NavigationDrawerAdapter extends ArrayAdapter<NavigationDrawerItem>{

        private LayoutInflater inflater;
        private int resourceId;
        public NavigationDrawerAdapter(Context context, int resource, List<NavigationDrawerItem> objects) {
            super(context, resource, objects);
            this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            this.resourceId=resource;
        }

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

            if(convertView==null){
                convertView=inflater.inflate(resourceId, parent, false);
                holder = new ViewHolder();
                holder.textView = (TextView)convertView.findViewById(R.id.text);
                holder.imageView = (ImageView)convertView.findViewById(R.id.icon);
                holder.itemParent = (LinearLayout)convertView.findViewById(R.id.item_parent);
                convertView.setTag(holder);
            }else{
                holder = (ViewHolder)convertView.getTag();
            }

            if(!isEnabled(position)){
                //区切り線を入れる
                View border = new View(getActivity());
                border.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));
                border.setBackgroundColor(getResources().getColor(R.color.border_color));
                holder.itemParent.addView(border);
            }else{
                if(mCurrentSelectedPosition==position){
                    holder.itemParent.setBackgroundResource(R.color.selected);
                }else{
                    holder.itemParent.setBackgroundResource(android.R.color.white);
                }
                NavigationDrawerItem item = getItem(position);
                holder.imageView.setImageResource(item.icon);
                holder.textView.setText(item.text);
            }

            return convertView;
        }


        @Override
        public boolean isEnabled(int position){
            return !(getItem(position).text.startsWith("-"));
        }

    }