0

AsyncTask の助けを借りて、Spinner を使用して WebService 呼び出しからデータを入力するアクティビティがあります。私の問題は、logcat ですべてのArrayAdapter<String>アイテムを表示できることですが、このアダプターを Spinner に渡すと、ドロップダウン リストのアイテムが表示されません。ここに私のコードスニペットがあります:

    public static ArrayAdapter<String> adapter;
    Spinner spnrCourseType;
    spnrCourseType.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                new DownloadCourseTypesList().execute(training_id);
                return true;
            }
        });

        spnrCourseType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                ting("You Selected : " + adapter.getItem(arg2));
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });
    /** Thread AsyncTask Class */
    private class DownloadCourseTypesList extends AsyncTask<String,Void,ArrayList<String>> {

        ProgressDialog progressDialog = new ProgressDialog(CorporateTrainingInquiryActivity.this);
        protected void onPreExecute(){
            actionBar.setProgressBarVisibility(View.VISIBLE);
            progressDialog.setTitle("Course Types Loading..");
            progressDialog.setMessage("Please Wait..");
            progressDialog.show();  
        }

        protected ArrayList<String> doInBackground(String... params) {          

            trainingList = new TrainingList(params[0]);
            ArrayList<String> values = trainingList.getTrainingList();    
//          adapter = new ArrayAdapter<String>(CorporateTrainingInquiryActivity.this,android.R.layout.simple_spinner_item,values);

            return values;
        }

        protected void onPostExecute(ArrayList<String> values) {
            actionBar.setProgressBarVisibility(View.GONE);
            adapter = new ArrayAdapter<String>(CorporateTrainingInquiryActivity.this,android.R.layout.simple_spinner_item,values);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            adapter.insert("Select Course Type",0);
            spnrCourseType.setAdapter(adapter);

            for(int i=0;i<adapter.getCount();i++){
                System.out.println("Item in adapter at position : " + i + adapter.getItem(i));
            }

            adapter.notifyDataSetChanged();
            if(progressDialog.isShowing()){
                progressDialog.dismiss();
            }
        }      
    }

上記のコードを実行すると、ProgressDialog が表示され、最初の項目、つまり「Select Course Type」のみが Spinner 自体に表示されますが、ドロップダウン リスト項目には表示されません。それについての手がかり。私は昨日からこれで立ち往生しています:( ここに画像の説明を入力

4

1 に答える 1

0

このコード:-

    spnrCourseType.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            new DownloadCourseTypesList().execute(training_id);
            return true;
        }
    });

何らかの競合状態が発生している可能性があります。スピナーを押すと、タスクが実行されますが、結果を表示するのに十分な速さでスピナーを設定できない可能性があります。

このコードを onCreate メソッドなどの別の場所に移動することをお勧めします。

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    new DownloadCourseTypesList().execute(training_id);
}

それが役立つことを願っています。

于 2012-05-17T07:32:05.823 に答える