AutoCompleteTextView基于Position从ArrayList获取值

时间:2016-08-24 08:08:25

标签: android json arraylist autocompletetextview

我在我的程序中使用AutoCompleteTextView,我在其中显示来自 JSON 的建议,而我的 JSON 看起来像:

{"areas":[{"area_id":"1","area_name":"Area 1"},{"area_id":"2","area_name":"Area 2"}],"success":1}

以下是 AutoCompleteTextView 代码以及OnItemClick

textArea.setAdapter(stringArrayAdapterAreas);

textArea.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    // along with name, I also want to fetch Id of that particular area

                    autoAreaName = (String) parent.getItemAtPosition(position);
                    Log.d("AreaName:", autoAreaName); // getting accurate area name

                    if(areaArrayList.contains(autoAreaName)) {

                        // how to get area id using area name

                    }

                }
            });

来自 webservice 获取可用Areas的代码:

     if (success == 1) {
     JSONArray jsonArray = response.getJSONArray("areas");

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

     JSONObject jsonObject = jsonArray.getJSONObject(i);

     Area area = new Area();
     area.setId(jsonObject.getInt("area_id"));
     area.setName(jsonObject.getString("area_name"));

     // adding area to areas array
     stringArrayListAreas.add(jsonObject.getString("area_name"));

     areaArrayList.add(area);

     } // for loop ends


     } // if ends

从JSON获取两个值(区域ID和名称)的最佳方法是什么?

已更新

public String toString(){
    return id+":"+name;
}

活动

    textArea.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Area area = new Area();
            Log.d("areaData:", area.toString());

        }
    });

延迟说

D/areaData:: 0:null

2 个答案:

答案 0 :(得分:1)

  

从中获取两个值(区域ID和名称)的最佳方法是什么   JSON?

最好的方法是使用包含两个信息的模型类将要提供的适配器绑定到AutoCompleteTextView。 E.g。

 public class Model {
   public String name;
   public String area_id;

   public void toString() {
      return name;
   } 
 }

您必须更改代码才能使用此类。在您的onItemClick中,您将投放到Model而不是String,并访问其成员以提取您需要的信息

答案 1 :(得分:0)

首先使用适配器中的models类来获取和设置详细信息,然后在itemclicklister上获取数据,如:

((DataModel)listview.getAdapter().getItem(position)).getarea_id();