2016-03-10 65 views
1

我知道,我看到了重複。但他們都沒有解決我的問題。活動甚至不打電話onActivityResult

我想讓我的代碼從EditMessage活動中獲取newMessage並將其傳遞給SendMessage活動,並且我知道我可能不需要使用onActivityResult強硬我仍然想知道這裏有什麼問題。

我添加了日誌消息來檢查我的問題在哪裏,但它甚至不會在onActivityResult中運行我的Log。

下面的代碼:

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); 
} 

任何幫助將是appriciated.Thanks。

+0

嘗試使用像'EditMessageActivity.this.startActivityForResult()',我認爲它會工作。 –

+0

這裏您的startingActivity是EditMessageActivity,因此您只會在EditMessageActivity中收到結果回調。 –

+1

我認爲你對ActivityResult的理解可能是關閉的。如果你從'EditMessageActivity'調用'startActivityResult()',你將得到'EditMessageActivity'中的結果而不是'SendMessageActivity' –

回答

1

我想讓我的代碼從EditMessage活動中獲取newMessage,並將其 傳遞給SendMessage活動。

比方說,有三個活動A(MainActivity)B(EditMessageActivity)C(SendMessageActivity)

一個得到消息一個,你startActivityForResult()。在BsetResult()B,然後致電finish()時,請求值被重新檢索。

結果將在A中通過覆蓋onActivityResult()來接收。然後開始C,並將該值置於意圖。

例如,從EditMessageActivity報告值回MainActivity

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); 
     } 
    }); 

如果只有兩個活動,則沒有必要的onActivityResult()。您可以使用Intent將消息直接傳遞到SendMessageActivity

例如,從發送到MainActivity價值EditMessageActivityonActivityResult()

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); 
      } 
     }); 
+0

非常感謝!這解決了我的問題,也幫助我理解我做得更清楚的事情! – Recomer

0

使用

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

startActivityForResult(intent,request); 

而不是

startActivity(intent); 

,並且不使用

finish() ; //調用活動的函數將從堆棧中移除活動。

+0

感謝您的建議,我從ᖷAЯAƸ得到了答案。 :) – Recomer