1

Webサービスから解析されたデータを使用するスピナーが3つあります。1番目のスピナーからアイテムを選択すると、2番目のスピナーは解析された関連データを表示します。

しかし、1番目のスピナーでアイテムを再度選択すると、関連するデータが2番目のスピナーで解析されないため、更新されません。

この問題の解決を手伝ってもらえますか?前もって感謝します。

    country_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

    public void onItemSelected(AdapterView<?> parent, View view,
            int position, long id) {
            int item=country_spinner.getSelectedItemPosition();
            if(item!=0)
            {

                String selected1=country_spinner.getItemAtPosition(position).toString();
                System.out.println(selected1);
                progressDialog=ProgressDialog.show(getParent(), "", "Loading...");
                new StateTask().execute();

            }

            adapter1.notifyDataSetChanged();
    }

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

    }
});

2番目のスピナー

      state_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

             public void onItemSelected(AdapterView<?> parent, View view,
                       int position, long id) {

                int item=state_spinner.getSelectedItemPosition();
               //   String sate=state_spinner.getSelectedItem().toString();
                if(item!=0)
                {

                    String selected=state_spinner.getItemAtPosition(position).toString();
                    System.out.println(selected);
                    city_spinner.setEnabled(false);
                    progressDialog=ProgressDialog.show(getParent(), "", "Loading...");
                        new CityTask().execute();
                }
                adapter2.notifyDataSetChanged();
               }

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

                    }
        });

StateTask

  public class StateTask extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... arg0) {
        //Creating JSON Parser instance//////////
        JSONParser jParser=new JSONParser();
        //Getting JSON String from URL..............
        JSONObject jObject=jParser.getJSONFromUrl(URL);
        try
        {
            jsonArray=jObject.getJSONArray(TAG_STATES);
            //final String[] country_array_spinner = new String[jsonArray.length()]; 


            for (int i=0; i<jsonArray.length(); i++)
            {
                //country_array_spinner[i]=jsonArray.getJSONObject(i).getString(TAG_STATE);
                adapter1.add(jsonArray.getJSONObject(i).getString(TAG_STATE));
            }

        }
        catch(JSONException e){
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(String result) {
         state_spinner.setEnabled(true);
        state_spinner.setAdapter(adapter1);
        progressDialog.dismiss();
        super.onPostExecute(result);
    }
}

CityTask

public class CityTask extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... arg0) {
        //Creating JSON Parser instance//////////
        JSONParser jParser=new JSONParser();
        //Getting JSON String from URL..............
        JSONObject jObject=jParser.getJSONFromUrl(URLs);
        try
        {
            String sate=state_spinner.getSelectedItem().toString();

            jsonArray=jObject.getJSONArray(TAG_CITIES);
            //final String[] country_array_spinner = new String[jsonArray.length()]; 

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

            {
                JSONObject e=jsonArray.getJSONObject(i);
                String ab=e.getString(TAG_STATE);
                Log.v(ab, "hgdsagds");
                if(ab.contains(sate)){
                    adapter2.add(jsonArray.getJSONObject(i).getString(TAG_CITY));
                }
                //country_array_spinner[i]=jsonArray.getJSONObject(i).getString(TAG_STATE);

            }

        }
        catch(JSONException e){
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(String result) {
        city_spinner.setEnabled(true);
        city_spinner.setAdapter(adapter2);
        progressDialog.dismiss();
        super.onPostExecute(result);
    }
}
4

1 に答える 1

0

コードロジックエラーがあるように見えます...

adapter1.add(jsonArray.getJSONObject(i).getString(TAG_STATE)); 

アダプターをクリア/nullすることはありません(少なくとも投稿されたコードでは)、上記のコードを使用してアダプターに追加し続けるだけです。これは、新しいアイテムがスピナーの最後にある (見えない可能性がある) ため、 さわやかではないように見える可能性があります。

または、それを行うコードを投稿から除外することもできます...

于 2012-10-06T12:21:37.380 に答える