2015-04-06 3 views
1

Привет Я разрабатываю приложение для Android, в котором я использую сетку. Я хочу обновить элемент сетки динамически. Мой элемент сетки содержит один текст заголовка. Я пытался сделать это так, но это не работает для меня.Android runOnUiThread не обновляет элементы пользовательского интерфейса

((Activity)context).runOnUiThread(new Runnable() 
    { 
     public void run() 
     { 
      Debug.print("this is update progress inside thread ..."); 

      owner.setText("Uploading..."); 

      invalidate(); 
      requestLayout(); 
     } 
    }); 

Таким образом, в приведенном выше коде его заявление об отпечатке печати. Но не обновлять текст моего владельца, который находится внутри элемента сетки.

Я попытался это также ...

Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      owner.setText("Uploading..."); 
     } 
    }; 
    handler.sendEmptyMessage(0); 
+0

Не могли бы вы добавить немного больше своего кода? Неясно, что такое «владелец», где вы его инициализируете и где все это работает. –

ответ

0

Таким образом, в коде выше его печать отладочный. Но не обновляю свой текст владельца , который находится внутри элемента сетки.

Я думаю, что это текстовое изображение не ссылается на ваш элемент в адаптере сетки. Вы можете проверить его с помощью тега set при инициализации и getTag() внутри метода runonUIThread.

Позвольте проверить это текстовое представление - это локальная или глобальная переменная. Если глобальный, это только ссылка на последний элемент - тогда проверьте последнее изменение элемента? ОК, если нет. Позвольте опубликовать полный код ur.

+0

Я внутри класса пользовательского вида, где у меня есть только контекстная ссылка. Невозможно получить активность. Я попытался удалить invalidate и requestLayout, но это не работает для меня. – nilkash

+0

Он обновляет несколько элементов сетки, кроме последнего добавленного. – nilkash

0
runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     Debug.print("Updating UI ..."); 
     owner.setText("Uploading ..."); 
     invalidate(); 
     requestLayout(); 
    } 
}); 
+0

Я внутри пользовательского класса просмотра, где у меня есть только справочная ссылка. Невозможно получить активность. – nilkash

+0

Тогда вы должны использовать Handler –

+0

Я тоже пробовал с обработчиком, но все еще не работал должным образом. – nilkash

0

Попробуйте обновить адаптер, который использовался для загрузки элемента сетки. Либо вы можете использовать метод invalidateViews() или adapter.notifyDataSetChanged()

Это поможет вам решить вашу проблему.

Счастливое кодирование.

+0

Srinivasan, что я на самом деле делаю, я добавляю элементы в сетку динамически. Что работает правильно. После этого я загружаю данные на сервер. Я хочу показать этот статус для элемента сетки. Если я добавлю несколько элементов в сетку, это будет работать, за исключением последнего. И если я загружу одну запись, она не работает. Это означает, что для одного элемента он не работает. Запись, добавленная первым. – nilkash

+0

Хорошо ... Я понял нилкаш. Скажите, пожалуйста, как вы можете найти текстовое представление «владелец» из Grid. Возможно, проблема заключается в том, чтобы найти представление, чтобы показать текст «Загрузить». И еще одно, пожалуйста, скажите, загружены ли данные на сервер или нет, если в сетке есть один элемент? – Srinivasan