View - nhaarman/Triad GitHub Wiki

The View class presents the data to the user, and passes user interaction to the Presenter. It implements the Container interface to act as a bridge between the Presenter and the View.

View creation

The View is instantiated by the Android system using the layout inflater. The layout resource id is defined in the Screen class, and the layout file should have the View class as its root:

<?xml version="1.0" encoding="utf-8"?>
<com.example.MyView xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <TextView
    android:id="@+id/view_my_textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" />

  <Button
    android:id="@+id/view_my_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/view_my_textview"
    android:layout_centerHorizontal="true" />

</com.example.MyView>

The View Class

The View class itself must implement the MyContainer interface, and have at least the necessary constructors:

public class MyView extends RelativeLayoutContainer<MyPresenter, ActivityComponent> implements MyContainer {

  public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }
   
  /* ... */
}

Child Views

Child Views such as the TextView in the above example can be injected automatically using Butter Knife:

public class MyView extends RelativeLayoutContainer<MyPresenter, ActivityComponent> implements MyContainer {

  /* ... */

  @InjectView(R.id.view_my_textview)
  protected TextView mTextView;

  @OnClick(R.id.view_my_button)
  public void onButtonClicked() {
    getPresenter().onIncrementButtonClicked();
  }
}

Abstract Containers

The RelativeLayoutContainer class manages the Presenter handling and View injection. It is recommended to extend this class for your Views. More of these container classes such as LinearLayout will follow soon.