Hello,
My daughter is 2 y.o and she often goes through these kind of phases, without signals. She is a good eater, so I don't worry too much but I admit it's tiring.
The thing is that dinner time (or lunch) shouldn't be a fight. After struggling a couple of time, I decided to make her feel like I gave up.
She doesn't want to eat what's in her plate (pasta, veggies that she usually eats?), fine : she finishes her meal like it was planned with a piece of cheese and a fruit (or applesauce) and then, bath & bed time.
I did that for 3 days. I kind of felt bad because she would go to bed with a half-full stomach, but I don't want her to decide. The forth day, I gave her her plate, she said "no", so I gave her regular portion of yogurt and fruit and after that, she was still hungry and she finally ate what was in her plate.
During these days, I didn't change anything to her breakfast or lunches = same portions.
For the fruits, does he eat applesauce or baby jars? Have if you try to put pieces in a different bowl ? My daughter loves to eat her broccoli puree in a heart shaped bowl. BTW, she doesn't know it's broccoli : I tell her it's "fruit puree"...
I have to trick her.
Also, she never ate "junk food". We have some at home, but we never eat in front of her. We wait until she's in bed if we're craving chips or Mac&Cheese.
Good luck !