2013-02-13 39 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