打开

时间:2015-04-27 07:55:18

标签: android view

我有一个包含通知列表的应用程序。 通知列在导航器中。 (即,当用户点击汉堡包图标时,打开通知列表)。 导航抽屉本身是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>

是否存在同步问题或我在这里做错了什么? 如果视图是开放的,它应该没有区别,对吧?

1 个答案:

答案 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

    }

}