Проблема с обработчиком (ImageView) - PullRequest
0 голосов
/ 12 мая 2011

Я хочу показать 2 изображения (одно при подключении и второе при отключении), и я использую обработчик, чтобы справиться с этим, однако у меня нет ни одного из 2 изображений, не знаю почему: .

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>

Есть идеи, пожалуйста, как решить эту проблему? Большое спасибо.

1 Ответ

2 голосов
/ 12 мая 2011

Вы (должны) дважды объявить переменную mRegistered, и пока вы устанавливаете значение для глобального значения (значение, объявленное внутри вашего Activity), вы проверяете значение другого, объявленного внутри.ваш handleUpdateStatus Runnable.

Вы должны немного очистить свой код:

  • удалить объявление mRegistration из вашей реализации Runnable,// Boolean mRegistered;
  • установите изображение для рисования с помощью идентификатора ресурса,

, и оно будет работать:

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;
...