2011-05-12 45 views
0

我想显示2图像(一个连接时,第二个时断开连接),我使用处理程序来处理,但是,我没有任何2个图像showen ,不知道为什么:。问题与处理程序(ImageView)

private Runnable handleUpdateStatus = new Runnable() 
    {  
     Boolean mRegistered; 

     public void run() 
     { 
      ImageView statusImageDisplay = (ImageView)findViewById(R.id.connected); 
      if (mRegistered) 
      { 
       statusImageDisplay.setImageDrawable(getResources().getDrawable(R.drawable.connected)); 
       Log.i("CONNECTED","IMAGE SET"); 
      } 
      else 
      { 
       statusImageDisplay.setImageDrawable(getResources().getDrawable(R.drawable.disconnected)); 
Log.i("DISCONNECTED","IMAGE SET"); 
       } 
      } 

    }; 

更改图像的代码片段:

public void onRegistrationDone(String localProfileUri, long expiryTime) { 
      updateStatus("Enregistré au serveur."); 
      Log.d("SUCCEED","Registration DONE"); 
      mRegistered = true; 
      mRegistrationUpdateHandler.removeCallbacks(handleUpdateStatus); 
      mRegistrationUpdateHandler.postDelayed(handleUpdateStatus, 4000); 
} 

当注册失败怎么办?验证码:

public void onRegistrationFailed(String localProfileUri, int errorCode,String errorMessage) { 
updateStatus("Enregistrement échoué. Veuillez vérifier vos paramètres."); 
Log.d("ERROR REGISTRATION",errorMessage); 

mRegistered = false; 
mRegistrationUpdateHandler.removeCallbacks(handleUpdateStatus); 
mRegistrationUpdateHandler.postDelayed(handleUpdateStatus, 2000); 
    } 

XML:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:id="@+id/sipLabel" 
     android:textSize="20sp" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
    <ImageView android:id="@+id/connected" android:src="@drawable/connected" 
     android:layout_below="@id/sipLabel" 
     android:layout_width="fill_parent" android:scaleType="center" 
     android:layout_height="fill_parent" android:layout_weight="0.35" 
     android:gravity="center" android:visibility="invisible" /> 
</LinearLayout> 

任何关于如何解决这个问题的想法吗? 非常感谢。

+0

@ rekaszeru:你是否更正了代码? (你编辑它:\) – androniennn 2011-05-12 12:17:30

+1

我已经格式化了xml代码,使其更具可读性,并且替换了空元素的''关闭标签(使用'<[...] />')。您可以通过点击“编辑”字后的时间链接查看修改内容。 – rekaszeru 2011-05-12 12:25:00

+0

@rekaszeru:清除;)。但任何想法请问问题的根源? :\ – androniennn 2011-05-12 12:58:13

回答

2

你(必须)有你的mRegistered变量声明两次,当你为全球一个设定值(您Activity内声明的),你检查的另一种价值,你的handleUpdateStatus Runnable内部声明。

应该清理一下你的代码位:

  • Runnable执行删除mRegistration声明 ,
    // Boolean mRegistered;
  • 通过资源 ID设置图像绘制,

它会工作:

private boolean mRegistered; 
private Runnable handleUpdateStatus = new Runnable() 
{ 
    public void run() 
    { 
     ImageView statusImageDisplay = (ImageView) findViewById(R.id.connected); 
     if (mRegistered) 
     { 
      statusImageDisplay.setImageResource(R.drawable.connected); 
      Log.i("CONNECTED", "IMAGE SET"); 
     } 
     else 
     { 
      statusImageDisplay.setImageResource(R.drawable.disconnected); 
      Log.i("DISCONNECTED", "IMAGE SET"); 
     } 
    } 
}; 

这就是你需要改变的一切(假设你的布局真的包含了一个图像编号为connected)。

更新
随着对mRegistrationUpdateHandler,你应该把它声明为您Activity的一个全局变量(最终或onCreate方法内初始化):

private final Handler mRegistrationUpdateHandler = new Handler(); 

private Handler mRegistrationUpdateHandler; 
+0

thnak你非常为您的答案,但只是其他的东西,请:handleUpdateStatus变量应该定义为全局变量像私人处理程序mRegistrationUpdateHandler; ? onRegistrationDone和onRegistrationFailed函数使用它(因为它一直不工作) – androniennn 2011-05-12 17:57:30

+1

我这样做了,并且认为你在代码中也是这样。请参阅我的更新以供参考。 – rekaszeru 2011-05-12 18:03:36

+1

你是天才。非常感谢你现在的作品。我的梦想是成为像你这样的优秀开发者:)(这不是恭维,因为你对你的答案如此耐心,你总是试图在这里帮助你找到答案,你的答案总是很详细)。谢谢。 – androniennn 2011-05-12 18:16:09