<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "../dtd/concept.dtd">
<concept id="c_code-generator" xml:lang="en-us">
  <title>Generating Java Code for an Activity or Fragment Layout</title>
  <shortdesc>MOTODEV Studio can generate boilerplate code for selected UI objects defined in an activity's or fragment's
    layout file. It generates attribute declarations, findViewById() calls, and event handlers.</shortdesc>
  <prolog>
    <metadata>
      <keywords>
        <!--<indexterm></indexterm>-->
      </keywords>
    </metadata>
  </prolog>
  <conbody>
    <p>Initiate the Java code generator by right-clicking the Java source file for your Activity or Fragment and
      selecting <menucascade><uicontrol>Source</uicontrol><uicontrol>Generate Java Code Based on
      Layout</uicontrol></menucascade>. The code generator begins by looking through the Java code for your selected
      Activity or Fragment to identify the xml-based layout file it uses. If it is processing an Activity, it searches
      for a call to setContentView() in the Activity's onCreate() method. If it is processing a Fragment, it searches
      for code that looks like this:
      <codeblock>	View v = inflater.inflate(R.layout.<i>myLayoutFileName</i>, container, false);
	return v;</codeblock>Having
      identified the layout file corresponding to the selected Java class, the code generator looks through the layout
      file for UI objects that have Android IDs defined with "@+id". It then presents the list of UI objects to you, and
      you indicate those UI objects for which it should generate code. Finally, the code generator generates the
      appropriate code and inserts it into the Activity's or Fragment's top-level class. </p>
    <p>Note that in order for the above to work, your Activity or Fragment code must not have errors. As well, the xml
      file that defines your layout must be well-formed. Also note that the Java code generator works with the Android
      Compatibility package: FragmentActivity subclasses are supported.</p>
    <section>
      <title>What it Generates</title>
      <p>The code generator adds to the Activity or Fragment an attribute for each selected UI object as well as for
        Fragments inside an Activity. Then, it generates the following code within your Activity's onCreate() method or
        your Fragment's onCreateView() method: <ol>
          <li>findViewById() statements for graphical items such as TextView, EditText, Button, etc.</li>
          <li>OnClickListener handlers for Button, ImageButton, and ToggleButton objects. If the button has an
            android:onClick attribute defined in the layout file, the named method is created (empty) instead of an
            inline OnClickListener handler.</li>
          <li>OnItemSelectedListener handlers for Spinner objects.</li>
          <li>OnItemClickListener handlers for Gallery objects.</li>
          <li>OnKeyListener handlers for EditText objects.</li>
          <li>OnSeekBarChangeListener handlers for SeekBar objects.</li>
          <li>OnRatingBarChangeListener handlers for RatingBar objects.</li>
        </ol></p>
      <p>For fragments inside an Activity, the code generator creates setFragmentManager().findFragmentById() calls.</p>
      <p>For RadioButtons inside a RadioGroup, the code generator creates an object that implements the
        View.OnClickListener interface. The object's generated onClick() method contains a switch statement with a case
        for each RadioButton.</p>
      <p>Note that the code generator does not simply add all of the above blindly. It is careful not to add duplicate
        attributes, event handlers, or findViewById() statements if it finds an existing findViewById() statement for a
        given UI object. So, for instance, if you have an existing layout with supporting code, upon adding a new UI
        object to that layout and initiating the code-generation process you will only be given the option to generate
        code for the new UI object. As well, the code is added in such a way as to allow you to use <menucascade
            ><uicontrol>Edit</uicontrol><uicontrol>Undo</uicontrol></menucascade> to back out the additions, if you
        decide not to go ahead with them. </p>
    </section>
  </conbody>
</concept>
