LCD I2C start-up printing problem

hello fellow prototyping fans.

recently, I have bought a 16x2 LCD with a I2C backpack.
after a few nights of trouble shooting, and reading alot of posts, (ALOT!) I finally got it. it prints, it works and dandy and all. until I plug a battery in it.

it seems that the arduino needs to be reset, after I turn it on with a switch.(powered with a 9 volt battery)
I figured it out it has something to do with sending the data. (after I poked it with a multimeter, trying to see if there is any communication)

however, how do I code, or make sure the arduino startup first and then the I2C?

EDIT :
thanks for pointing it out Paul. you guys do want to help, but not knowing the situation. I will explain what I did with the I2C display.

after reading a lot of posts and forums about I2C display. I noticed that not every I2C is the same. sadly, I dont know wich bus I use, or a serial number for it. I did not even found a datasheet of it.
however, I have the link of the website were I bought it from. maybe you guys can know about it.
Be awere, the website is dutch!

https://www.iprototype.nl/products/components/led-lcd/lcd16x2-I2C-BL

so I explain step by step what I did to make it somehow work. but not fully functional.

first;
after reading that every I2C has a different ID. I used a rangefinder sketch to search for the I2C display. mine was; 20x3f.

then ;
okay, I thought. after checking that things were in order. I uploaded the code and the following problem appeared ;

the display. after a few minutes or a reset. printed weird characters on the display. it look “corrupt”
some one had the same problem as me. and made a video about it to see what happened.
his topic can be found here ;

I did not used his solution. it didn’t worked for me. however, I read that some Libraries were faulty. and used an updated version, wich can compile with the normal LiquidCrystal library.

the library can be found here. I used the version 1.2.1

https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

after that. it prints! the new I2C library did the trick. (I did NOT used the updated LiquidCrystal library)

But now my current problem ;

After I uploaded the test code to the arduino UNO, run the sketch first with the computer. Wich worked. and after I am using the battery; it prints nothing. it starts up, backlights glows. But it doesn’t print text on the display. Until I press the reset button on the arduino UNO.

must I use the Wire Library to send data? of something else to make sure the I2C does start op properly.

here is my test sketch ;
note; the LiquidCrystal library is on purpose. and it compiled with the updated I2C library. using the arduino programmer 1.6.1

#include <Wire.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x3f,16,2);

void setup() {
  lcd.init();
  lcd.init();
  lcd.backlight();
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

I hope this makes the fog of confusion disappear.

Have another go at explaining what your problem is, step by step.

Then having read the instructions, post your code.