我有一个包含通知列表的应用程序。 通知列在导航器中。 (即,当用户点击汉堡包图标时,打开通知列表)。 导航抽屉本身是swipeRefreshLayout中的列表视图,就像您可以在以下代码中看到的那样(用户必须将其拉下来刷新通知):
<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);
}
}
};
此部分代码应在创建通知时刷新视图(如果是脱机创建则发送)。
当我现在发送离线创建的通知并在打开导航抽屉之前稍等一下,视图会更新,通知会标记为发送。 所以这很好。
现在问题: 当我发送离线创建的通知并且在发送通知后直接打开导航抽屉时,列表视图不会更新,并且通知仍然标记为不发送(但是当我打开通知时,它被标记为发送)。 / p>
是否存在同步问题或我在这里做错了什么? 如果视图是开放的,它应该没有区别,对吧?
答案 0 :(得分:1)
您应该通过这种方式更新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
}
}