通知onclick到其他片段

vom3gejh  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(262)

我想根据订单状态的变化显示通知的状态。到现在为止,我已经可以展示它了。现在,下一个任务是,当用户单击通知时,我更喜欢将其带到track order片段,用户可以在其中详细查看其订单状态。
这是我的密码:

public static void createNotification(FragmentActivity activity, boolean isLoggedIn, String selectedOrderId, String order_status, String status_desc)
{
    NotificationCompat.Builder builder =
            new NotificationCompat.Builder(activity)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("Lugmah Order Status")
                    .setContentText("The Order Status of Order Id: "+selectedOrderId+ "is: "+status_desc)
                    .setDefaults(NotificationCompat.DEFAULT_SOUND)
                    .setAutoCancel(true);
    int NOTIFICATION_ID = 12345;

        Intent targetIntent = new Intent(activity, TrackOrderFragment.class);
        targetIntent.putExtra("isTrackOrder", false);
        Fragment fragment = new Fragment();
        Bundle bundle = new Bundle();

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(activity);

        if(isLoggedIn)
        {
            if(status_desc.equals("Rejected"))
            {
                targetIntent.putExtra("isLoggedIn", true);
                targetIntent.putExtra("status_desc", status_desc);
                fragment.setArguments(bundle);
                bundle.putString("status_desc", status_desc);
                bundle.putString("selectedOrderId", selectedOrderId);
                targetIntent.putExtras(bundle);
                stackBuilder.addParentStack(TrackOrderFragment.class);
                stackBuilder.addNextIntent(targetIntent);
            }
        }
        else
        {
            targetIntent.putExtra("isLoggedIn", false);
        }
        PendingIntent contentIntent = stackBuilder
                .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT
                        | PendingIntent.FLAG_ONE_SHOT);
        //PendingIntent contentIntent = PendingIntent.getActivity(activity, 0, targetIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(contentIntent);

    NotificationManager nManager = (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE);
    nManager.notify(NOTIFICATION_ID, builder.build());
}

我想在两个片段之间传递status\u desc和selectedorderid数据。
为了接收数据,这里是我写的代码。

status_desc = getArguments().getString("status_desc");
        rejectedOrderId = getArguments().getString("rejectedOrderId");

在这里,当管理员更改订单状态时,我会收到通知。但是,我无法在单击通知时导航到trackorderfragment.class。
我们将不胜感激。

zzoitvuj

zzoitvuj1#

可能在做什么 Intent targetIntent = new Intent(activity, TrackOrderActivity.class); 而不是 Intent targetIntent = new Intent(activity, TrackOrderFragment.class); 会帮你的。您可以将一个标志作为intent extra发送,以了解活动是否是根据通知创建的。把碎片和那个活动联系起来。

k3fezbri

k3fezbri2#

我主要是说这个代码块。

NotificationCompat.Builder builder =
        new NotificationCompat.Builder(activity)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Lugmah Order Status")
                .setContentText("The Order Status of Order Id: "+selectedOrderId+ "is: "+status_desc)
                .setDefaults(NotificationCompat.DEFAULT_SOUND)
                .setAutoCancel(true);
int NOTIFICATION_ID = 12345;

    Intent targetIntent = new Intent(activity, TrackOrderActivity.class);
    targetIntent.putExtra("isTrackOrder", false);
    Bundle bundle = new Bundle();
    if(isLoggedIn)
    {
        if(status_desc.equals("Rejected"))
        {
            targetIntent.putExtra("isFromNotification", true);
            bundle.putString("status_desc", status_desc);
            bundle.putString("sejectedOrderId", selectedOrderId);
            targetIntent.putExtra("orderBundle",bundle);
        }
    }
    else
    {
        targetIntent.putExtra("isLoggedIn", false);
    }

    //PendingIntent 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
        targetIntent, 0);
    builder.setContentIntent(contentIntent);

   NotificationManager nManager = (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE);
nManager.notify(NOTIFICATION_ID, builder.build());

现在,在trackorderactivity oncreate方法中执行此操作。

setContentView(R.layout.activity_track_order);
if(getIntent().getBooleanExtra("isFromNotification",true)){
      TrackOrderFragment fragment = new TrackOrderFragment();
    fragment.setArguments(getIntent().getBundleExtra("orderBundle"));

    getSupportFragmentManager().beginTransaction().
       replace(R.id.container,fragment).commit();
}

现在在trackorderfragment上,如果调用getarguments(),我想您将获得包数据。

e0bqpujr

e0bqpujr3#

你可以点击按钮尝试下面的代码

btn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Fragment fragment = new tasks();
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.content_frame, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }
});

相关问题