2015-04-27 6 views
0

У меня есть приложение, которое содержит список уведомлений. Уведомления перечислены в навигационном устройстве. (т. Е. Когда пользователь нажимает значок гамбургера, открывается список открытых уведомлений). Навигационные сам ящик является ListView в swipeRefreshLayout, как вы можете видеть в следующем коде (пользователь должен тянуть его вниз, чтобы обновить уведомления):Вид Navigationdrawer не обновляется, когда открыт

<LinearLayout 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:gravity="bottom|center" 
    android:orientation="vertical"> 

    <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/swipe_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <ListView 
      android:id="@+id/left_drawer" 
      android:layout_width="240dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:background="#ffffff" 
      android:choiceMode="singleChoice" 
      android:divider="@android:color/darker_gray" 
      android:dividerHeight="0dp" /> 
    </android.support.v4.widget.SwipeRefreshLayout> 
</LinearLayout> 

До сих пор все работает, как ожидалось. Теперь мне пришлось реализовать сценарий для загрузки автономных уведомлений. В моей службы я отправить сообщение обновления широковещательного, который извлекается с помощью навигационной панели с помощью следующего кода (все равно придется очистить его немного):

private static BroadcastReceiver messageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String message = intent.getStringExtra("message"); 
     //TODO make message for notification service 
     if(!LocationService.REFRESH_LOCATION_ACTION_MESSAGE.equals(message)) { 
      Log.i(TAG, "Got message: " + message); 
      notifications.clear(); 
      notifications.addAll(intent.getParcelableArrayListExtra(NotificationService.NOTIFICATION_LIST_ARGUMENT)); 
      try { 
       Collections.sort(notifications, new NotificationComparator()); 
      } catch(Exception e){ 
       Log.e(TAG, Log.getStackTraceString(e)); 
      } 
      Log.d(TAG, "got notifications: " + notifications); 
      adapter.notifyDataSetChanged(); 
      swipeLayout.setRefreshing(false); 
     } 
    } 
}; 

Эта часть кода должна обновить вид когда создается уведомление (или отправляется, если оно было создано в автономном режиме).

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

Теперь вопрос: Когда я отправляю автономное созданное уведомление и открываю навигационный ящик непосредственно после отправки уведомления, просмотр списка не обновляется, и уведомление по-прежнему помечено как не отправленное (но когда я открываю уведомление, оно помечено как отправка).

Есть ли проблема синхронизации или я делаю что-то неправильно здесь? Это не должно иметь значения, если вид открыт или нет, не так ли?

ответ

1

Вы должны обновить ListView в navigationdrawer этим путем

public void updateView(int index) { 

    if (mDrawerList != null) { 

     View v = mDrawerList.getChildAt(index - 

       mDrawerList.getFirstVisiblePosition()); 

     if (v == null) 
      return; 
     ListView lv= (TextView) v.findViewById(R.id.left_drawer); //update your data here 

    } 

} 
+0

действительно, данные не обновляются в этом сценарии. благодаря –

Смежные вопросы