简体   繁体   中英

Activity does not even call onActivityResult

I know,I have seen the duplicates. But none of them solved my issue.

I want my code to get newMessage from EditMessage activity and pass it to the SendMessage Activity, and I know I may not need to use onActivityResult tough I still want to learn what's the issue here.

I'have added log messages to check where my problem is but it doesn't even run my Log inside the onActivityResult.

Here's the code:

EditMessageActivity:

public static final String MESSAGE = "message";

EditText currentTextEditText;
Button sendButton;
Button saveButton;
Button cancelButton;
Button concatenateButton;

private String message;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_message_layout);

    message = getIntent().getStringExtra(SendMessageActivity.MESSAGE);

    currentTextEditText = (EditText) findViewById(R.id.currentText_EditText);
    sendButton = (Button) findViewById(R.id.sendButton);
    saveButton = (Button) findViewById(R.id.saveButton);
    cancelButton = (Button) findViewById(R.id.cancelButton);
    concatenateButton = (Button) findViewById(R.id.concatenateButton);

    if (message != null) //Activity may be started via "edit" Button
        currentTextEditText.setText(message);

    currentTextEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            message = currentTextEditText.getText().toString();
        }

        @Override
        public void afterTextChanged(Editable s) {
            message = currentTextEditText.getText().toString();
        }
    });

    concatenateButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String[] messages = getResources().getStringArray(R.array.messages_array);

            AlertDialog.Builder builder = new AlertDialog.Builder(EditMessage.this);
            builder.setTitle("Sonuna Ekle").setItems(messages, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    char lastChar = message.charAt(message.length() - 1);
                    String messageToAdd = messages[which];
                    if (lastChar == '!' || lastChar == '?' || lastChar == '.') {
                        message += " " + messageToAdd;
                    } else {
                        message += " " + messageToAdd.toLowerCase();
                    }
                    currentTextEditText.setText(message);
                    dialog.cancel();
                }
            });
            builder.setCancelable(true);
            AlertDialog alertDialog = builder.create();
            alertDialog.show();
        }
    });

    sendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(EditMessage.this, NumberSelectActivity.class);
            intent.putExtra(MESSAGE, message);
            startActivity(intent);
            finish();
        }
    });

    saveButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i("Custom", "Save buttn clicked");
            Intent intent = new Intent(EditMessage.this, SendMessageActivity.class);
            intent.putExtra(MESSAGE, message);
            setResult(RESULT_OK);
            startActivityForResult(intent, SendMessageActivity.REQUEST_NEW_MESSAGE);
            finish();
            Log.i("Custom", "Custom Message created :" + message);
        }
    });

    cancelButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

}

SendMessageActivity:

public static final String MESSAGE = "message";
public static final int REQUEST_NEW_MESSAGE = 1001;

private static String message;

ListView messageListView;
Button createMessage;

ArrayList<String> messageList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send_message);

    //Retrive Pre-Defined Messages
    //TODO Add in-app message defining
    String[] dbMessages = getResources().getStringArray(R.array.messages_array);

    for (int i = 0; i < dbMessages.length; i++) {
        messageList.add(dbMessages[i]);
    }

    //Create the array adapter
    //TODO Upgrade this to a custom adapter which will also show an small image related to the message
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, messageList);

    createMessage = (Button) findViewById(R.id.createMessageBtn);
    createMessage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startEditMessage("");
        }
    });

    messageListView = (ListView) findViewById(R.id.messagesListView);
    messageListView.setAdapter(adapter);

    //Make this one clickable
    messageListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            message = messageList.get(position);

            AlertDialog.Builder builder = new AlertDialog.Builder(SendMessageActivity.this);
            builder.setTitle("Send Message");
            builder.setMessage(message);
            builder.setPositiveButton("Gönder", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent(SendMessageActivity.this, NumberSelectActivity.class);
                    intent.putExtra(MESSAGE, message);
                    startActivity(intent);
                }
            });
            builder.setNeutralButton("Düzenle", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //TODO Create new activity to edit message and send it or just cancel it
                    //Todo and return back
                    startEditMessage(message);
                }
            });
            builder.setNegativeButton("İptal", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

            builder.setCancelable(true);
            AlertDialog alertDialog = builder.create();
            alertDialog.show();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.i("Custom", "Result OK değil :" + message);
    if (resultCode == RESULT_OK) {
        Log.i("Custom","Result OK:" + message);
        if (requestCode == REQUEST_NEW_MESSAGE) {
            Log.i("Custom","request is ok :" + message);
            String newMessage = getIntent().getStringExtra(EditMessage.MESSAGE);
            if (newMessage != null) {
                Log.i("Custom","Message is not null  :" + message);
                messageList.add(newMessage);

                //TODO Create new method to load all messages from database and just call that method
                ArrayAdapter<String> updatedAdapter = new ArrayAdapter<>(this,
                        android.R.layout.simple_list_item_1, android.R.id.text1, messageList);
                messageListView.setAdapter(updatedAdapter);

                Log.i("Custom", "Updated adapter :" + message);
            }

        }
    }
}

public void startEditMessage(String message) {
    Intent intent = new Intent(SendMessageActivity.this, EditMessage.class);
    intent.putExtra(MESSAGE, message);
    startActivity(intent);
}

Any help will be appriciated.Thanks.

I want my code to get newMessage from EditMessage activity and pass it to the SendMessage Activity.

Lets say there are three activities A(MainActivity) , B(EditMessageActivity) , C(SendMessageActivity) .

To get message from B to A , you startActivityForResult() from A . When required value is retreived in B , you setResult() in B and then call finish() .

The result will be received in A by overriding onActivityResult() . And then start C , and put the value in intent.

For example, reporting value back to MainActivity from EditMessageActivity :

saveButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i("Custom", "Save buttn clicked");
            Intent intent = new Intent();
            intent.putExtra(MESSAGE, message);
            setResult(RESULT_OK, intent);
            finish();
            Log.i("Custom", "Custom Message created :" + message);
        }
    });

If there are only two activities, then no need of onActivityResult() . You can directly pass the message to SendMessageActivity using Intent .

For example, sending value from MainActivity to EditMessageActivity without onActivityResult() :

saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("Custom", "Save buttn clicked");
                Intent intent = new Intent(EditMessageActivity.this, SendMessageActivity.class);
                intent.putExtra(MESSAGE, message);
                startActivity(intent);
                Log.i("Custom", "Custom Message created :" + message);
            }
        });

Use

int request = 0;// Any number to identify your request

startActivityForResult(intent,request);

Instead of

startActivity(intent);

And don't use

finish() ;// function from the calling activity which will remove the activity from the stack.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM