首页 > 解决方案 > 总是在ActivityResult上获得RESULT_CANCELL,而

问题描述

在我的项目中,我有一个包含列表的活动 A。我在列表适配器(onBindViewHolder)中设置了onClickListener,通过单击每个项目,开始活动B(startActivityforResult)。然后在活动BI setResult(RESULT_OK)中,但在活动A中总是得到RESULT_CANCELL。

这是我的适配器代码:

        holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context,TicketActivity.class);
            intent.putExtra("ticketID",tickets.get(position).getId());
            intent.putExtra("ticketStatus",tickets.get(position).getStatus());
            activity.startActivityForResult(intent,NEW_TICKET_MESSAGE_CODE);
        }
    });

当我将结果设置为 OK 时,这是活动 B。

    @Override
public void onBackPressed() {
    super.onBackPressed();
    if(hasNewMessage) {
        setResult(RESULT_OK);
        finish();
    }else{
        setResult(RESULT_CANCELED);
    }
    finish();

}

我确定 hasNewMessage 返回 true。这是我检查结果的活动 B:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == NEW_TICKET_REQUEST) {
        if (resultCode == RESULT_OK) {
            recreate();
        }

    } if (requestCode == NEW_TICKET_MESSAGE_CODE) {
        if (resultCode == RESULT_OK){
            recreate();
        }
    }
}

但是使用代码 NEW_TICKET_MESSAGE_CODE 的请求总是得到 RESULT_CANCEL 为什么?!

标签: androidandroid-recyclerviewstartactivityforresult

解决方案


删除super.onBackPressed();线

你的方法必须像这样

@Override
public void onBackPressed() {
    if(hasNewMessage) {
         setResult(RESULT_OK);
         finish();
    }else{
         setResult(RESULT_CANCELED);
         finish();
    }

}

推荐阅读