Vas*_*Doe 4 java android callback listener
让我们假设 2 个活动Activity1
和Activity2
。我需要调用方法methodAct1()
(内Activity1
从)methodAct2
(内部Activity2
)。我认为它应该使用回调侦听器工作 - 我不想使用EventBus
库!
我得到 java.lang.NullPointerException
使用这个代码:
界面:
public interface MyListener {
public void listen();
}
Run Code Online (Sandbox Code Playgroud)
创建事件的活动:
public class Activity2 extends Activity {
private MyListener myListener;
public void setUpListener(MyListener myListener) {
this.myListener = myListener;
}
private void doWork(){
//do stuff
myListener.listen();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望在工作完成后获得该事件的活动:
public class Activity1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Activity2 activity2 = new Activity2();
activity2.setUpListener(new setUpListener() {
@Override
public void listen() {
// get the event here
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是绝对不可能的。你永远不会自己实例化一个新的 Activity。您不会同时运行两个活动。
如果您希望另一个 Activity 根据您之前的 Activity 想要做某事,那么您需要将其添加到您的 Intent 中。
Intent intent = new Intent(this, Activity2.class);
intent.putExtra("data field", "data value");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
如果您希望通过回调实现特定功能,那么您可能会考虑Fragments。通过这种方式,您可以运行相同的 Activity,并且它可以告诉各个 Fragment 他们需要做什么。
NPE 的发生是因为您的声明:
Activity2 activity2 = new Activity2(); <--
Run Code Online (Sandbox Code Playgroud)
您永远不应该这样做,而应该在活动 1 中执行以下操作:
Intent intent = new Intent(this, Activity2.class);
intent.putExtra("dataKey", "dataValue");
startActivityForResult(pickContactIntent, CALLBACK_REQUEST);
Run Code Online (Sandbox Code Playgroud)
startActivityForResult ()提供从 Activity 2 到 Activity 1 的回调,您必须覆盖 Activity 1 中的结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == CALLBACK_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// The Intent's data Uri identifies which contact was selected.
// Do something with the contact here (bigger example below)
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19574 次 |
最近记录: |