2013-02-13 43 views
0

在項目中,我這樣定義一個接口:Java,如何通過接口設置變量?

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「真」,它的內容改變,但它沒有。這是我的日誌:

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 

正如你所看到的,「timerStatus」被設置在第四行,以「真」但之後,我不知道爲什麼它被設置爲false!

任何建議,將不勝感激。謝謝

+0

什麼是'localResults'? – 2013-02-13 09:15:43

+0

@ baraky,在calss A下面,switch(); – Hesam 2013-02-13 09:17:38

+0

@ Eng,我忘了清除它。你考慮一個布爾變量,可以是真或假。 – Hesam 2013-02-13 09:18:31

回答

0

你還沒有顯示SearchResultsActivity()的代碼,但它顯然不同於MainActivity()。您看到的日誌條目來自兩個不同的活動,並帶有兩個單獨的變量。

+0

ops,這是我愚蠢的錯誤,對不起。這是我的A級。我改變了代碼。我使用SearchResultsActivity更改了MainActivity。 – Hesam 2013-02-13 09:30:03

+0

是的,但是您正在創建活動的新實例 - 您可能有兩個實例正在運行。 – Clyde 2013-02-13 09:37:11

+0

你很棒;)我改變了私人布爾timerStatus = false;到私有靜態布爾timerStatus = false;所以,問題解決了。是的,正如我在其他評論中所說的,我對您驗證過的新對象感到懷疑。謝謝。 – Hesam 2013-02-13 09:56:19

0

現在你已經改變了代碼,現在看起來更清晰....

你有沒有嘗試調試onPostExecute()?

如果您看到日誌,它清楚地表明它被多次設置爲false,但僅爲true。所以,調試你的onPostExecute()方法,主要是完成()函數....

我希望問題存在那裏。

希望這會幫助你解決你的問題。

謝謝...

Mr.777