Android: Utilisation de l'élément sélectionné dans AutoCleteTextView pour remplir un autre champ

StackOverflow https://stackoverflow.com/questions/9425334

Question

J'essaie de créer une application où les noms des employés sont stockés dans une table. Sur une page particulière, l'utilisateur peut saisir le nom d'un employé dans un AutoCleteTextView et sélectionner l'une des suggestions qui apparaissent. Sur la base de ce qui a été sélectionné, je veux remplir d'autres champs à l'écran. Pour cela, je retourne un tableau de chaîne 2D à partir de la base de données SQL Lite Lire contenant le nom des tableaux, le département, DESG etc ... Le tableau de nom se nourrit de la vue complète automatique.

Maintenant, le problème concerne l'index qui est renvoyé dans la méthode OnClickItemListener.

Par exemple, si j'ai le tableau 2D comme:

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

Maintenant, si je tape ABC dans le AutoCleteTextView, seuls 3 éléments sont affichés et si je sélectionne ABCDEF, la position et l'ID renvoyés sont 2 alors que l'index dans le tableau d'origine est 5. Je veux que ce 5 soit renvoyé d'une manière ou d'une autre afin que je puisse obtenir le Valeurs de département et deg correspondants de D6 ..

J'espère que je suis assez clair .. c'est ma 2ème semaine de programmation Android .. Alors s'il vous plaît soyez doux .. J'ai déjà recherché le Web assez mais je n'ai pas trouvé de réponse à cette question.

Edit ::: J'ai finalement fini par créer l'adaptateur client, mais il y a encore un problème qui persiste ... Je perds en quelque sorte la valeur de l'objet ArrayList dans la classe CustomAdapter lorsqu'une touche est appuyée. Donc, essentiellement la condition "Orig .size ()> 0 "dans la boucle pour la méthode de performance de performance ne réussit jamais et la saisie semi-automatique ne fonctionne pas ...

Vous trouverez ci-dessous comment je définis l'adaptateur ...

      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);
        }
        });

Vous trouverez ci-dessous comment mon adaptateur personnalisé est écrit ....

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();
                }   
            }    

        }

    }
}

J'ai créé cela en voyant divers sites Web et différents messages de messages ainsi que le code source de l'adaptateur de tableau ... je ne comprends pas où les choses vont mal pour moi lorsque plusieurs autres personnes ont mentionné que le même code fonctionne pour eux ..... toute aide est grandement apprécié ...

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top