11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RxAndroidとRetrolambdaでオレオレリスナーを駆逐する

Posted at

Androidにて独自イベントを取得する場合はListenerを作成するのが通例ですが
規模の大きいアプリだとListener(Callback)のパッケージが肥大化しがちです。
これをRxAndroidとRetrolambdaを利用することで解決できます。

一般的なケース

OnCustomListener.java
public interface OnCustomListener {
	void onSuccess();
}
HogeView.java
public class HogeView extends View {
	private OnCustomListener mListener;

	public void setListener(OnCustomListener listener) {
		this. mListener = listener;
	}

	public void hoge() {
		// 何らかの処理
		if (mListener != null) {
			mListener.onSuccess();
		}
	}
}
MainActivity.java
public class MainActivity extends Activity implements OnCustomListener{

	private HogeView mHogeView;

	private void init() {
		mHogeView.setListener(this);
	}

	@Override	
	public void onSuccess() {
		Log.d(TAG, "onSuccess");
	}
}

RxAndroidとRetrolambdaを併用したケース

HogeView.java
public class HogeView extends View {
	private Action0 mListener;

	public void setListener(Action0 listener) {
		this. mListener = listener;
	}

	public void hoge() {
		// 何らかの処理
		if (mListener != null) {
			mListener.call();
		}
	}
}
MainActivity.java
public class MainActivity extends Activity {

	private HogeView mHogeView;

	private void init() {
		mHogeView.setListener(this::onSuccess);
		/*
		↓↓の省略した記述です↓↓
		mHogeView.setListener(new Action{
			@Override	
				public void call() {
					onSuccess();
				}
		});
		*/
	}
	
	private void onSuccess() {
		Log.d(TAG, "onSuccess");
	}
}

コードの長さはさほど変わっていませんが、interfaceの代わりを立派に務めてくれます。
RxAndroidとRetrolambdaを利用することでListenerクラスを減らすことができ、独自Viewから呼ばれる処理もprivate化することができます。

また、引数や返り値が欲しい場合はAction1やFuncなどを利用することで柔軟に対応可能です。

RxAndroidとRetrolambdaは本当に相性がいいですね!!

11
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?