Today in one of the code examples I saw this construction
private static final class ActionListener implements TextView.OnEditorActionListener { private final WeakReference<MainActivity> mainActivityWeakReference; public static ActionListener newInstance(MainActivity mainActivity) { WeakReference<MainActivity> mainActivityWeakReference = new WeakReference<>(mainActivity); return new ActionListener(mainActivityWeakReference); } private ActionListener(WeakReference<MainActivity> mainActivityWeakReference) { this.mainActivityWeakReference = mainActivityWeakReference; } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { MainActivity mainActivity = mainActivityWeakReference.get(); if (mainActivity != null) { if (actionId == EditorInfo.IME_ACTION_GO && mainActivity.shouldShowError()) { mainActivity.showError(); } else { mainActivity.hideError(); } } return true; } } This is how it is applied.
mEditText.setOnEditorActionListener(ActionListener.newInstance(this)); I don’t understand why to use weak links than it is better than the good old way to immediately pass the listener
mBtnContinue.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { doOnContinue(); } });