ClickListener

Add a ClickListener to an item. Options 2 or 3 recommended.

Method 1 - clutters up onCreate, especially if several click events.
Does not promote code reuse.
public class AwesomeButtonActivity extends AppCompatActivity {

    private Button awesomeButton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        awesomeButton = new Button(this);

        awesomeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                awesomeButtonClicked();
            }
        });
    }

    private void awesomeButtonClicked() {
        awesomeButton.setText("AWESOME!");
    }
}

Method 2 - Assigns OnClickListener to a field. Allows reuse.

public class AwesomeButtonActivity extends AppCompatActivity {

    private Button awesomeButton;
    
    private View.OnClickListener awesomeOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            awesomeButtonClicked();
        }
    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        awesomeButton = new Button(this);

        awesomeButton.setOnClickListener(awesomeOnClickListener);
    }

    private void awesomeButtonClicked() {
        awesomeButton.setText("AWESOME!");
    }
}

Method 3 - declare a class to implement OnClickListener.
Easy to add extra functionality to e.g. count how many times clicked.

public class AwesomeButtonActivity extends AppCompatActivity {

    private Button awesomeButton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        awesomeButton = new Button(this);

        awesomeButton.setOnClickListener(new AwesomeButtonClick());
    }

    private void awesomeButtonClicked() {
        awesomeButton.setText("AWESOME!");
    }
    
    class AwesomeButtonClick implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            awesomeButtonClicked();
        }
    }
}

Method 4 - have Activity implement OnClickListener. Gets messy with multiple click items.
Exposes onClick to anyone who has access to the Activity.
Could be problematic if other interfaces with onClick are implemented.
Does not promote code reuse.


public class AwesomeButtonActivity extends AppCompatActivity implements View.OnClickListener {

    private Button awesomeButton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        awesomeButton = new Button(this);

        awesomeButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        awesomeButtonClicked();
    }

    private void awesomeButtonClicked() {
        awesomeButton.setText("AWESOME!");
    }
    
}