Android: Usando o item selecionado no AutoCompleteTextView para preencher outro campo

Estou tentando criar um aplicativo em que os nomes dos funcionários estejam armazenados em uma tabela. Em uma página específica, o usuário pode inserir o nome de um funcionário em uma exibição automática de preenchimento automático e selecionar uma das sugestões que serão exibidas. Com base no que foi selecionado, desejo preencher outros campos na tela. Para isso, estou retornando uma matriz de seqüência de caracteres 2D da leitura do banco de dados SQL Lite que contém o nome, o departamento, o desg etc. das matrizes ... A matriz de nomes é alimentada na exibição AutoCompleta

Agora, o problema está no índice que está sendo retornado no método onClickItemlistener. O índice que está sendo retornado corresponde à lista exibida finalmente antes de um item específico ter sido clicado e não ao da matriz de nomes original que foi passada.

Por exemplo, se eu tiver a matriz 2D, como:

    name            department             designation
   Abc1234            Dept1                   desg1
   Def1234            D2                       d2
   Abcxyz             D3                        d3
   Defabc             D4                       D5
   Abcdef             D6                       D6

Agora, se eu digitar Abc no AutoCompleteTextView, apenas 3 itens serão exibidos e se eu selecionar Abcdef, a posição e o ID retornados serão 2, enquanto o índice na matriz original é 5. Quero que esse 5 retorne de alguma forma para que eu possa obter os valores correspondentes de departamento e desg de D6 ..

Espero que eu seja claro o suficiente .. Esta é a minha segunda semana de programação para Android .. por favor, seja gentil .. Eu já procurei na Web o suficiente, mas não consegui encontrar uma resposta para esta pergunta ..

EDIT ::: Finalmente acabei criando o Adaptador do Cliente, mas ainda existe um problema ... De alguma forma, estou perdendo o valor do objeto ArrayList na classe CustomAdapter quando uma tecla é pressionada. Essencialmente, a condição " orig.size ()> 0 "no loop for do método performFiltering nunca é bem-sucedido e o preenchimento automático não funciona ...

Abaixo é como estou configurando o adaptador ...

      ArrayList<Part_Mstr_Info> mAllParts = partMstrDbHelper.getAll();
    if (mAllParts != null) {
    /*  ac_part_id = mAllParts.get_part_id();
        ac_name = mAllParts.get_name();
        ac_desg = mAllParts.get_desg();
        ac_org = mAllParts.get_org();
        ac_dept = mAllParts.get_dept();*/
        adapter = new CustomAdapter(this, R.layout.ac_name_list, mAllParts);
        mName.setAdapter(adapter);
        mName.setOnItemClickListener(new OnItemClickListener(){
        @Override
            public void onItemClick(AdapterView<?> adapter, View view, int index, long id) {

            Part_Mstr_Info part_mstr_info = (Part_Mstr_Info) adapter.getItemAtPosition(index);
            mPartMstrID = part_mstr_info.get_part_id();
            name = part_mstr_info.get_name();
            mName.setText(name);
            desg = part_mstr_info.get_desg();
            mDesg.setText(desg);
            org = part_mstr_info.get_org();
            mOrg.setText(org);
            dept = part_mstr_info.get_dept();
            mDept.setText(dept);
        }
        });

Abaixo é como meu adaptador personalizado é escrito ....

package com.meeting.minutes;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;

import com.meeting.minutes.PartMstrDbAdapater.Part_Mstr_Info;

public class CustomAdapter extends ArrayAdapter<Part_Mstr_Info> implements Filterable{
    private ArrayList<Part_Mstr_Info> entries, orig;
    private Activity activity;
    private ArrayFilter myFilter;

    public CustomAdapter(Activity a, int textViewResourceId, ArrayList<Part_Mstr_Info> entries) {
        super(a, textViewResourceId, entries);
        this.entries = entries;
        orig = this.entries;
        this.activity = a;
    }

    public static class ViewHolder{
        public TextView tv_ac_name;
        public TextView tv_ac_desg;
        public TextView tv_ac_org;
        public TextView tv_ac_dept;
    }

    @Override
    public int getCount(){
          return entries!=null ? entries.size() : 0;
    }

    @Override
    public Part_Mstr_Info getItem(int index) {
        return entries.get(index);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
        if (v == null) {
            LayoutInflater vi =
                (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.ac_name_list, null);
            holder = new ViewHolder();
            holder.tv_ac_name = (TextView) v.findViewById(R.id.ac_name);
            holder.tv_ac_desg = (TextView) v.findViewById(R.id.ac_desg);
            holder.tv_ac_org = (TextView) v.findViewById(R.id.ac_org);
            holder.tv_ac_dept = (TextView) v.findViewById(R.id.ac_dept);
            v.setTag(holder);
        }
        else
            holder=(ViewHolder)v.getTag();

        final Part_Mstr_Info custom = entries.get(position);
        if (custom != null) {
            holder.tv_ac_name.setText(custom.get_name());
            holder.tv_ac_desg.setText(custom.get_desg());
            holder.tv_ac_org.setText(custom.get_org());
            holder.tv_ac_dept.setText(custom.get_dept());
        }
        return v;
    }

    @Override
    public Filter getFilter() {
        if (myFilter == null){
            myFilter = new ArrayFilter();
        }
        return myFilter;
    }


    private class ArrayFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            if (orig == null)
                orig = entries;
            if (constraint != null) {
                ArrayList<Part_Mstr_Info> resultsSuggestions = new ArrayList<Part_Mstr_Info>();
                for (int i = 0; i < orig.size(); i++) {
                    if(orig.get(i).get_name().toLowerCase().startsWith(constraint.toString().toLowerCase())){
                        resultsSuggestions.add(orig.get(i));
                    }
                }
                FilterResults results = new FilterResults();
                results.values = resultsSuggestions;
                results.count = resultsSuggestions.size();
                return results;
            }
            else {
                return new FilterResults();
            }
        }

        @Override
        @SuppressWarnings("unchecked")
        protected void publishResults(CharSequence constraint, FilterResults results) {
            clear();
            ArrayList<Part_Mstr_Info> newValues = (ArrayList<Part_Mstr_Info>) results.values;
            if(newValues !=null) {
                for (int i = 0; i < newValues.size(); i++) {
                    add(newValues.get(i));
                }
                if(results.count>0) {
                    notifyDataSetChanged();
                } else {
                    notifyDataSetInvalidated();
                }   
            }    

        }

    }
}

Eu criei isso vendo vários sites e postagens diferentes, bem como o código-fonte do Array Adapter ... Não consigo entender onde as coisas estão dando errado para mim quando várias outras pessoas mencionaram que o mesmo código funciona para eles ... ajuda é muito apreciada ....