Autocompletetextview仅显示项目值(citta),单击时检索两个值

问题是从autocompletetextview内部的对象列表中捕获了2个值。

好的。让我们看看MapFragment中的一些代码:


private AutocompleteAdapter autocompleteAdapter;
private AppCompatAutoCompleteTextView luogoInput;
private static final int TRIGGER_AUTO_COMPLETE = 100;
private static final long AUTO_COMPLETE_DELAY = 300;
private Handler handlerLuogo;

private static final int REQUEST_CODE = 101;

@Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {     

            /* find view text used for autocomplete as txtLocalita,see below */
            luogoInput = rootView.findViewById(R.id.txtLocalita);

            /* set autocomplete adapter  */
            autocompleteAdapter = new AutocompleteAdapter(getactivity(),android.R.layout.simple_dropdown_item_1line);
            luogoInput.setThreshold(3);
            luogoInput.setadapter(autocompleteAdapter);

            luogoInput.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s,int start,int count,int after) {

                }

                @Override
                public void onTextChanged(CharSequence s,int before,int count) {

                    handlerLuogo.removeMessages(TRIGGER_AUTO_COMPLETE);
                    handlerLuogo.sendEmptyMessageDelayed(TRIGGER_AUTO_COMPLETE,AUTO_COMPLETE_DELAY);

                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });

            luogoInput.setOnItemClicklistener(new AdapterView.OnItemClicklistener() {

                /* Method of autocomplete click */
                @Override
                public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3) {
                    SearchMappa selected = (SearchMappa) arg0.getadapter().getItem(arg2);
                    Toast.makeText(getactivity(),"Clicked " + arg2 + " città: " + selected.getcitta() + " latitudine: " + selected.getLatitudine() + " longitudine: " + selected.getLongitudine(),Toast.LENGTH_SHORT).show();
                }
            });

            handlerLuogo = new Handler(new Handler.Callback() {
                @Override
                public boolean handleMessage(Message msg) {
                    if (msg.what == TRIGGER_AUTO_COMPLETE) {
                        if (!TextUtils.isEmpty(luogoInput.getText())) {
                            makeApiCall2(luogoInput.getText().toString());
                        }
                    }
                    return false;
                }
            });

}

来自用php开发的api的对象列表类(makeapicall2是用于获取对象列表的“ Web服务”):

public class SearchMappa implements Parcelable {

    public String citta;
    public String latitudine;
    public String longitudine;

    private SearchMappa searchMappaItem;
    private SharedPrefsHelper sharedPrefsHelper;

    public SearchMappa() {

    }

    public SearchMappa(String citta,String latitudine,String longitudine) {
        this.citta = citta;
        this.latitudine = latitudine;
        this.longitudine = longitudine;
    }

    protected SearchMappa(Parcel in) {
        citta = in.readString();
        latitudine = in.readString();
        longitudine = in.readString();
        searchMappaItem = in.readParcelable(SearchMappa.class.getclassLoader());
    }

    @Override
    public void writeToParcel(Parcel dest,int flags) {
        dest.writeString(citta);
        dest.writeString(latitudine);
        dest.writeString(longitudine);
        dest.writeParcelable(searchMappaItem,flags);
    }



    public SearchMappa(Context context,JSONObject jsonObject){

        sharedPrefsHelper = new SharedPrefsHelper(context);
        searchMappaItem = new SearchMappa();

        try
        {
            if (jsonObject.getString("citta") != null) {

            }
        }
        catch(Exception e)
        {
            Log.e("Eccezione parsing json",e.toString());
        }

        sharedPrefsHelper = new SharedPrefsHelper(context);

        try {

            searchMappaItem = parseSearchMappa(context,searchMappaItem,jsonObject);


        } catch (Exception e) {
            Log.e("Exception parseJson",e.toString());
        }

    }

    public SearchMappa parseSearchMappa(Context context,SearchMappa searchMappaItem,JSONObject jsonObject) {

        sharedPrefsHelper = new SharedPrefsHelper(context);

        try {

            searchMappaItem.setCitta(jsonObject.getString("citta"));
            searchMappaItem.setLatitudine(jsonObject.getString("latitudine"));
            searchMappaItem.setLongitudine(jsonObject.getString("longitudine"));


        } catch (Exception e) {
            Log.e("Exception parseJson",e.toString());
        } finally {
            return searchMappaItem;
        }


    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<SearchMappa> CREATOR = new Creator<SearchMappa>() {
        @Override
        public SearchMappa createFromParcel(Parcel in) {
            return new SearchMappa(in);
        }

        @Override
        public SearchMappa[] newArray(int size) {
            return new SearchMappa[size];
        }
    };

    public String getcitta() {
        return citta;
    }

    public void setCitta(String citta) {
        this.citta = citta;
    }

    public String getLatitudine() {
        return latitudine;
    }

    public void setLatitudine(String latitudine) {
        this.latitudine = latitudine;
    }

    public String getLongitudine() {
        return longitudine;
    }

    public void setLongitudine(String longitudine) {
        this.longitudine = longitudine;
    }


}

用于AutoCompleteTextView的自动完成适配器,名为“ txtLocalita”

public class AutocompleteAdapter extends ArrayAdapter<SearchMappa> implements Filterable {

    private List<SearchMappa> mlistData;
    public AutocompleteAdapter(@NonNull Context context,int resource) {
        super(context,resource);
        mlistData = new ArrayList<>();
    }
    public void setData(List<SearchMappa> list) {
        mlistData.clear();
        mlistData.addAll(list);
    }
    @Override
    public int getcount() {
        return mlistData.size();
    }
    @Nullable
    @Override
    public SearchMappa getItem(int position) {
        return mlistData.get(position);
    }
    /**
     * Used to Return the full object directly from adapter.
     *
     * @param position
     * @return
     */
    public SearchMappa getObject(int position) {
        return mlistData.get(position);
    }
    @NonNull
    @Override
    public Filter getFilter() {
        Filter dataFilter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if (constraint != null) {
                    filterResults.values = mlistData;
                    filterResults.count = mlistData.size();
                }
                return filterResults;
            }
            @Override
            protected void publishResults(CharSequence constraint,FilterResults results) {
                if (results != null && (results.count > 0)) {
                    notifyDataSetChanged();
                } else {
                    notifyDataSetInvalidated();
                }
            }
        };
        return dataFilter;
    }

}

最后,Autocompletetextview的xml中名为txtLocalita的组件具有以下当前代码:

  <AutoCompleteTextView
            android:id="@+id/txtLocalita"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:drawableLeft="@drawable/ic_username"
            android:hint="Cerca luogo"
            android:height="40dp"
            android:text=""
            android:layout_centerHorizontal="true"
            android:textSize="15sp"
            android:layout_weight="3.5"
            android:paddingLeft="10dp"
            android:textColor="@color/oro"
            android:textColorHint="@color/oro"
            android:drawablePadding="10dp"
            android:layout_margin="10dp"
            android:background="@drawable/input_login"
            />

我想要的结果是:当我写前3个字母(有效)时,自动完成功能必须仅显示SearchMappa值类的“ citta”,但它显示整个对象。因此: 自动完成工作

Autocompletetextview仅显示项目值(citta),单击时检索两个值

但是我只想查看“ citta”值,当我单击其中的一个时,我必须选择所选项目的“ latitudine”和“ longitudine”值。我该怎么做? 任何帮助表示赞赏。 谢谢 克里斯蒂安

shenghuat 回答:Autocompletetextview仅显示项目值(citta),单击时检索两个值

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3099234.html

大家都在问