Android 从ArrayAdapter&;设置微调器中的值和文本;格森

Android 从ArrayAdapter&;设置微调器中的值和文本;格森,android,gson,android-arrayadapter,Android,Gson,Android Arrayadapter,我正在使用Json Asp.NET Web服务和Android Soap服务检索数据。 它工作得很好。现在,我想在ArrayAdapter&Gson的微调器中设置值和文本。怎么做? 我的代码: placelist = gson.fromJson(result, City[].class); ArrayAdapter<City> adapter = new ArrayAdapter<City>(getApplicationContext(), android.R.layo

我正在使用Json Asp.NET Web服务和Android Soap服务检索数据。
它工作得很好。现在,我想在ArrayAdapter&Gson的微调器中设置值和文本。怎么做?

我的代码:

placelist = gson.fromJson(result, City[].class);
ArrayAdapter<City> adapter = new ArrayAdapter<City>(getApplicationContext(), android.R.layout.simple_dropdown_item_1line, placelist);
spinnerFood.setAdapter(adapter);

我想将CityName设置为微调器文本,将CityId设置为微调器值。City是包含CityId和CityName参数的java类文件。

请遵循以下教程


首先在JsonArray中检索响应,然后从数组中检索JSONObject。并将两者存储在数组中,若只希望CityName作为微调器的下拉值,则可以将该值用于微调器

然后,您应该只将CityName的列表而不是City类的数组传递给适配器。 因此,要从数组中提取CityName,可以执行以下操作:

List lList = Arrays.asList(placelist);
List<String> cityName = new ArrayList<String>();
List<String> cityId = new ArrayList<String>();
City obj;

for (int i=0; i < lList .size(); i++)
{
obj= lList.get(i);
cityName.add(obj.getCityName());
cityId.add(obj.getCityId()); // City Id will be the value for on click of spinner items

}
List-lList=Arrays.asList(placelist);
List cityName=new ArrayList();
List cityId=new ArrayList();
城市obj;
对于(int i=0;i
现在,您可以将此cityName列表传递给arrayadapter:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_dropdown_item_1line, cityName);
ArrayAdapter=新的ArrayAdapter(getApplicationContext(),android.R.layout.simple\u下拉列表\u item\u 1line,cityName);
接下来是问题的第二部分,您需要为微调器设置一个侦听器,在该侦听器中可以从创建的“cityId”数组列表中获取相应cityId的值

   public class CustomOnItemSelectedListener implements OnItemSelectedListener {
             String Id;
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
            // TODO Auto-generated method stub


            id= cityId.get(pos);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }

    } 
公共类CustomOnItemSelectedListener实现OnItemSelectedListener{
字符串Id;
@凌驾
已选择公共位置(AdapterView父项、视图、整数位置、长id){
//TODO自动生成的方法存根
id=城市id.get(pos);
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
} 
让我知道它是否有效


“问候”

显示您的输出以及您想要的输出类型。放置图片。你们可以在帖子中看到输出。有很多解决方案:我希望CityId作为值,CityName作为文本。所以,请澄清。。。您希望在微调器下拉列表中看到什么,以及单击该微调器项时应该发生什么?只需忘记单击该微调器。在微调器中,我将CityId作为值,CityName作为文本。我还不清楚您的问题,但似乎您希望微调器的下拉列表值中同时包含城市id和城市名称。如果是这种情况,您需要一个自定义适配器,它将接受“city”类的数组/数组列表。请查看此为spinner定制的适配器。如果您在这方面需要帮助,请告诉我。对不起,我已经尝试了您的代码,并且得到了我想要的数据。谢谢……:)
   public class CustomOnItemSelectedListener implements OnItemSelectedListener {
             String Id;
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
            // TODO Auto-generated method stub


            id= cityId.get(pos);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }

    }