簡體   English   中英

在Android中將Json Array值設置為AutoCompleteTextView

[英]Set Json Array values to AutoCompleteTextView in Android

我是Android開發的新手,我想將Json數組綁定到Form(注冊表單)中的android AutocompleteTextView。

在此處輸入圖片說明 Json數組如下所示

{"Status":true,"errorType":null,"InstituteList":[{"InstituteID":"1","InstituteName":"Demo Institute"},{"InstituteID":"16","InstituteName":"Sheridan College"},{"InstituteID":"17","InstituteName":"iCent Prosp"},{"InstituteID":"18","InstituteName":"Seneca College"}]}

這里的類型機構名稱是自動completeTextView。 主要要求是,我可以綁定前端中的Json響應InstituteName中的值,並且當單擊Submit按鈕時,需要使用InstituteID對象。

目前,我可以將InstituteName對象綁定到AutocompleteTextView,並且可以正常工作。

在此處輸入圖片說明 但是“提交操作”的執行情況並不理想。

我無法在代碼中獲取InstituteID以執行

這是我的代碼。

從Web服務獲取響應作為json數組並在asyncTask中進行綁定。

  @Override
    protected void onPostExecute(String res) {

            try
            {
                Log.i("Intitute List",res);
            JSONObject responseObject = new JSONObject(res);
            String status=responseObject.getString("Status");
            ArrayList<String> listInstituteNames = new ArrayList<>();
            JSONArray detailsArray = responseObject.getJSONArray("InstituteList");

            for (int i = 0; i <detailsArray.length() ; i++) {
                JSONObject obj = detailsArray.getJSONObject(i);
                listInstituteNames.add(obj.getString("InstituteName"));
            }

            //Log.i("InstituteName", String.valueOf(listInstituteNames));
            myStringArray = listInstituteNames;

            AutoCompleteAdapter adapter = new AutoCompleteAdapter(SignUpActivity.this, android.R.layout.simple_dropdown_item_1line, android.R.id.text1, listInstituteNames);
            autoTextView.setThreshold(1);
            autoTextView.setAdapter(adapter);




            }
                    catch (JSONException e1) {
            e1.printStackTrace();
        }

AutoCompleteAdapter.java

 package Adapter;
 import java.util.ArrayList;
 import java.util.List;

 import android.content.Context;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.Filter;
 import android.widget.Filterable;

public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {

private ArrayList<String> fullList;
private ArrayList<String> mOriginalValues;
private ArrayFilter mFilter;

public AutoCompleteAdapter(Context context, int resource, int textViewResourceId, List<String> objects) {

    super(context, resource, textViewResourceId, objects);
    fullList = (ArrayList<String>) objects;
    mOriginalValues = new ArrayList<String>(fullList);

}

@Override
public int getCount() {
    return fullList.size();
}

@Override
public String getItem(int position) {
    return fullList.get(position);
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
    return super.getView(position, convertView, parent);
}

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


 private class ArrayFilter extends Filter {
    private Object lock;

    @Override
    protected FilterResults performFiltering(CharSequence prefix) {
        FilterResults results = new FilterResults();

        if (mOriginalValues == null) {
            synchronized (lock) {
                mOriginalValues = new ArrayList<String>(fullList);
            }
        }

        if (prefix == null || prefix.length() == 0) {
            synchronized (lock) {
                ArrayList<String> list = new ArrayList<String>(mOriginalValues);
                results.values = list;
                results.count = list.size();
            }
        } else {
            final String prefixString = prefix.toString().toLowerCase();

            ArrayList<String> values = mOriginalValues;
            int count = values.size();

            ArrayList<String> newValues = new ArrayList<String>(count);

            for (int i = 0; i < count; i++) {
                String item = values.get(i);
                if (item.toLowerCase().contains(prefixString)) {
                    newValues.add(item);
                }

            }

            results.values = newValues;
            results.count = newValues.size();
        }

        return results;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {

        if(results.values!=null){
            fullList = (ArrayList<String>) results.values;
        }else{
            fullList = new ArrayList<String>();
        }
        if (results.count > 0) {
            notifyDataSetChanged();
        } else {
            notifyDataSetInvalidated();
        }
    }
 }
}

XML文件中的AutoCompleteTextView節。

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:id="@+id/autoCompt"
    android:orientation="vertical">

    <AutoCompleteTextView
        android:id="@+id/instname_field"
        android:layout_width="match_parent"
        android:hint="Type Institution Name"
        android:paddingLeft="10dp"
        android:textColor="#fff"
        android:background="#b8d1e5"
        android:layout_height="40dp"
        android:textSize="20dp"
        android:ems="10"/>
    </LinearLayout>

我該如何解決這個問題。 謝謝。

您會看到@blackBelt注釋是正確的方法。

但是在這里,我向您解釋了另一種使用Hashmap代替Object class易於理解的方法。

HashMap<String, String> map_name_value = new HashMap<String, Stirng>();

for (int i = 0; i <detailsArray.length() ; i++) {

          JSONObject obj = detailsArray.getJSONObject(i)

          listInstituteNames.add(obj.getString("InstituteName"))

          map_name_value.put(obj.getString("InstituteName"),obj.getString("InstituteID"));

    }

然后,在單擊項目時。

做這個:

autoTextView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int pos,
                long id) {
             Editable message = autoTextView.getText();

             String  item_name    = message.toString();

              String item_id = map_name_value.get(item_name);
               //your stuff
           }
    });

 //item_name is name of institute
 // item_id is id of institute

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM