我尝试更改 this 答案以将数据从片段发送到新活动。但是当活动开始时
listener
会变为空。
我检查过,在第一次活动开始后,侦听器受到重视并且工作正常。 我知道有更好的方法在片段和活动之间进行通信,但为了学习,我想这样做。谢谢。
地图片段:
private static MapsFragment.onMySignalListener listener;
public void switchWindow() {
if (listener == null)
Toast.makeText(getContext(), "Problem", Toast.LENGTH_LONG).show();
if(listener != null){
listener.onMySignal(paramImageUrl);
}
}
public interface onMySignalListener {
void onMySignal(String image_url);
}
public static void setOnMySignalListener(MapsFragment.onMySignalListener listener) {
MapsFragment.listener = listener;
}
目的地活动:
protected void onCreate(Bundle savedInstanceState) {
.
MapsFragment.setOnMySignalListener(new MapsFragment.onMySignalListener() {
@Override
public void onMySignal(String image_url) {
ImageUrl = image_url;
}
});
}
在片段中按钮侦听器的某处我调用此方法
switchWindow();
要解决此问题,您可以在 Activity 的
onCreate()
方法中初始化侦听器,而不是在片段的 onCreateView()
方法中初始化。
试试这个
public class DestinationActivity extends AppCompatActivity {
private static MapsFragment.onMySignalListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_destination);
// Initialize the listener.
listener = new MapsFragment.onMySignalListener() {
@Override
public void onMySignal(String image_url) {
ImageUrl = image_url;
}
};
}
// ...
}
在 Activity 的 onCreate() 方法中初始化侦听器后,您可以使用 setter 方法将其传递给片段。
public class MapsFragment extends Fragment {
private static onMySignalListener listener;
public static void setOnMySignalListener(onMySignalListener listener) {
MapsFragment.listener = listener;
}
// ...
public void switchWindow() {
if (listener == null)
Toast.makeText(getContext(), "Problem", Toast.LENGTH_LONG).show();
if (listener != null) {
listener.onMySignal(paramImageUrl);
}
}
// ...
}