【问题标题】:Java, How to set a variable through interface?Java,如何通过接口设置变量?
【发布时间】:2013-02-13 09:12:24
【问题描述】:

在我的项目中,我定义了一个这样的接口:

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

如您所见,“timerStatus”在第四行设置为“true”,但之后我不知道为什么它设置为 false!!!

任何建议将不胜感激。谢谢

【问题讨论】:

  • 什么是localResults
  • @baraky,在类 A 中,在 switch() 下方;
  • @Eng,我忘了清除它。你考虑一个布尔变量,它可以是真或假。
  • @Eng,我改变了那部分。谢谢

标签: java android interface


【解决方案1】:

您没有显示 SearchResultsActivity() 的代码,但它显然与 MainActivity() 不同。您看到的日志条目来自具有两个独立变量的两个不同活动。

【讨论】:

  • ops,这是我的愚蠢错误,对不起。那是我的A班。我更改了代码。我用 SearchResultsActivity 更改了 MainActivity。
  • 是的,但是您正在创建一个新的活动实例 - 您可能有两个实例正在运行。
  • 你太棒了;)我改变了私有布尔计时器状态=假;到私有静态布尔 timerStatus = false;所以,问题解决了。是的,正如我在其他评论中所说,我对您验证过的新对象持怀疑态度。谢谢。
【解决方案2】:

现在您已经更改了代码,现在看起来更清晰了......

您是否尝试调试 onPostExecute()?

如果你看到日志,它清楚地表明它被多次设置为 false,但只有一次设置为 true。所以,调试你的 onPostExecute() 方法,主要是 isComplete() 函数....

我希望问题出在那儿。

希望这能帮助您解决问题。

谢谢...

777先生

【讨论】:

    猜你喜欢
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2011-12-07
    相关资源
    最近更新 更多