I have the following code:
private Toast movieRecordToast;
private void displayNextMovie() {
if (movieRecordToast != null) movieRecordToast.canc
The wroclai's solution is excellent! However it screws the Toast when going form long message toast to short one and vice versa.
To fix this instead of using previous object recreate it. So instead of this line:
mToastText.setText(message);
write this one: myToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
The animations also looks better :)
I think there are many ways you can achieve displaying the next/prev info to the user. I would ditch the toasts altogether and update the text of a TextView with the name of next/prev movie. That would eliminate your problem and also IMHO makes for better UI.
However, if your design requirements do ask for toast notifications, try:
private Toast nextMovieRecordToast;
private Toast prevMovieRecordToast;
private void displayNextMovie() {
if (prevMovieRecordToast != null) prevMovieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often)
nextMovieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT);
nextMovieRecordToast.show();}
private void displayPrevMovie() {
if (nextMovieRecordToast != null) nextMovieRecordToast.cancel();
prevMovieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT);
prevMovieRecordToast.show(); }
Instead of creating a new Toast
object each time you want a new text displayed you can easily hold on to only one Toast
object and cancel the current Toast
whenever you want. Before the next Toast
is being displayed you can change text with Toast.setText()
function.
Sample code:
private Toast mToastText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create the object once.
mToastText = Toast.makeText(this, "", Toast.LENGTH_SHORT);
}
private void displayText(final String message) {
mToastText.cancel();
mToastText.setText(message);
mToastText.show();
}