所以,我知道你不应该从非Activity类调用intent,更不用说带有结果的intent了。一个非Activity类不应该这样做,并对它应该做的任何事情负责。
现在,我有一个NappingActivity
,显示了十几个按钮,在VideoButtonView
中实现。这些按钮扩展android.widget.Button
。
我希望能够拖动并单击按钮,因此我通过设置实现了VideoButtonView
中的拖动/点击逻辑:
this.setOnTouchListener(new View.OnTouchListener() { … }
当用户点击onTouch(View v, MotionEvent event)
内的按钮时,会调用以下内容:
Context context = v.getContext();
Intent showVideo = new Intent(context, ViewActivity.class);
context.startActivity(showVideo);
到目前为止,非常好。
现在,此意图返回NappingActivity
,但我想通过返回结果来分离这个视频播放意图。所以,理想情况下,我会从startActivityForResult
而不是NappingActivity
调用此VideoButtonView
,因为后者无论如何都不可能。
我如何重构这个,所以我可以处理活动中的点击而不是按钮,或者至少从那里发送意图?
我应该将整个点击并拖动逻辑移动到活动吗?听起来不太干净。
我可以实现某种自定义侦听器吗?
答案 0 :(得分:1)
我如何重构这个,所以我可以处理点击 在活动内而不是按钮,或至少发送 意图来自那里?
您可以实施回调系统。见第三个答案。
我应该将整个点击并拖动逻辑移动到活动吗?没有按'吨 听起来很干净。
不,你正在混合逻辑(但我不明白你如何实施拖拽系统所以我可能错了)。
我可以实现某种自定义侦听器吗?
创建界面:
public interface StartVideoListener {
public void onStartVideoRequest(int buttonId);
}
让你的NappingActivity
实现此界面:
public class NappingActivity extends Activity implements StartVideoListener {
// ...
public void onStartVideoRequest(int buttonId) {
// you know the button that was clicked, start the desired activity.
}
在VideoButtonView
班级中,将Context
从构造函数转换为StartVideoListener
字段,并在onTouch
中调用其方法:
// ...
mListener.onStartVideoRequest(v.getId());