Firstly, thankyou for writing an absolutely first-class set of tutorials.  They're well pitched such that - i imagine - new developers wont struggle; likewise, they don't frustrate more experienced developers (for which I am very grateful!)  They're easy to jump through too so i don't have to tread on things i've already covered.

Please, if I may, I have an academic question; I tried to go more generic with your tutorial (Like i say, i'm more experienced so i like to push myself) and implemented the onclick functionality in the class.  so rather than instantiating View.OnClickListener anonymously, in button.setOnClickListener, I merely assigned button.setOnClickListener(this) and then encapsulated your call to activityCommander within my onClick override.

HOWEVER! the result is that toString() is returning class names rather than the user's text.  Am I right in thinking that because I haven't created the onclick event in the OnCreateView focus, my TextView implementations are effectively unassigned (and therefore it's default to Java's native OnString behaviour)? 

I figure your way will fix the problem, i'm just curious to know why my way doesn't work.?

here's an excerpt:

  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    // Fragment syntax is different to standard view using FindViewById().  we pass it the throughput "container"
    View view = inflater.inflate(R.layout.top_section_fragment, container, false);

    // now the admin is done we can add custom functionality like we would on normal onCreate;
    et_top = (EditText)view.findViewById(;
    et_bot = (EditText)view.findViewById(;
    final Button b_click = (Button)view.findViewById(;

    return view;

  public void onClick(View v) {
    // when the button gets clicked
    if (v.getId() ==
      activityCommander.createMeme(et_top.toString(), et_bot.toString());