0

私のプロジェクトでは、次のようなインターフェイスを定義しました。

public interface SearchResultProgressListener {
    public void OnSearchCompleted(boolean value);
}

これをクラス A (SearchResultsActivity と呼ばれる) に実装しました。

public class SearchResultsActivity extends BaseActivity implements
         SearchResultProgressListener {

    private ProgressBar mProgressBar;
    private boolean timerStatus = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_searchresults);

        // Linking progressbar
        mProgressBar = (ProgressBar) findViewById(R.id.progressBar_fake);
        new CountDownTimer(10000, 1000) {

             public void onTick(long millisUntilFinished) {
                 int temp = (int) millisUntilFinished / 1000;
                 switch(temp) {
                     case 9: temp = 1;   break;
                     case 8: temp = 2;   break;
                     case 7: temp = 3;   break;
                     case 6: temp = 4;   break;
                     case 5: temp = 5;   break;
                     case 4: temp = 6;   break;
                     case 3: temp = 7;   break;
                     case 2: temp = 8;   break;
                     case 1: temp = 9;   break;
                     case 0: temp = 10;  break;
                 }
                 Log.e("Hesam", "Status1: " + timerStatus);
                 if(!timerStatus)
                     mProgressBar.setProgress(temp);
                 else
                     mProgressBar.setProgress(10);
             }

             public void onFinish() {
                 mProgressBar.setVisibility(View.GONE);
             }
          }.start();
    }

    @Override
    public void OnSearchCompleted(boolean status) {
        this.timerStatus = status;
        Log.e("Hesam", "Status0: " + timerStatus);
    }
}

クラス B (HotelsAsyncTaskFragment と呼ばれる) があり、このクラスを介してブール値をクラス A に送信します。

public class HotelsAsyncTaskFragment extends SherlockFragment {
    private SearchResultProgressListener srpListener;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        srpListener = (SearchResultProgressListener) new SearchResultsActivity();
    }

    class HotelsSearchTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {...}

        @Override
        protected Void doInBackground(Void... params) {...}

        @Override
        protected void onPostExecute(Void result) {
            if(!isComplete()) {
                HotelsAsyncTaskFragment.this.srpListener.OnSearchCompleted(false);
                } else { 
            HotelsAsyncTaskFragment.this.srpListener.OnSearchCompleted(true);
                }
    }
    }
}

ここで、クラス A の「timerStatus」を「True」に設定すると、コンテンツが変更されることを期待していますが、変更されません。これは私のログです:

02-13 16:41:58.716: E/Hesam(469): Status1: false
02-13 16:42:13.566: E/Hesam(469): Status1: false
02-13 16:42:14.566: E/Hesam(469): Status1: false
02-13 16:42:14.611: E/Hesam(469): Status0: true
02-13 16:42:15.571: E/Hesam(469): Status1: false
02-13 16:42:16.601: E/Hesam(469): Status1: false
02-13 16:42:17.616: E/Hesam(469): Status1: false
02-13 16:42:18.616: E/Hesam(469): Status1: false
02-13 16:42:19.621: E/Hesam(469): Status1: false
02-13 16:42:20.626: E/Hesam(469): Status1: false
02-13 16:42:21.621: E/Hesam(469): Status1: false

ご覧のとおり、4行目で「timerStatus」が「true」に設定されていますが、その後、なぜfalseに設定されているのかわかりません!!!

任意の提案をいただければ幸いです。ありがとう

4

2 に答える 2