我还没有在堆栈的任何地方找到明确的解决方案。
这是我的基本设置
public class Activity1 extends AppCompatActivity
{
private OnAttributesUpdatedListener onAttributesUpdatedListener;
public interface OnAttributesUpdatedListener
{
public void onAttributesUpdated();
}
public void setTargetFragment(Fragment fragment)
{
this.onAttributesUpdatedListener = (OnAttributesUpdatedListener) fragment;
}
private void whenFinishedSomethingCallback()
{
onAttributesUpdatedListener.onAttributesUpdated();
}
}
public class Fragment1 extends Fragment implements Activity1.OnAttributesUpdatedListener
{
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
if(rivalButtonClick == 0)
{
Activity1 activity1 = new Activity1();
activity1.setTargetFragment(Fragment1.this);
startActivity(new Intent(getActivity(), activity1.getClass()));
}
}
});
}
我得到一个空指针异常并崩溃:onAttributesUpdatedListener.onAttributesUpdated();
因为某些原因我的监听器永远不会被正确设置。这样做的正确方法是什么?
答案 0 :(得分:0)
只有当Desired onCreatView()
是该特定片段的父onActivityCreated()
时,您才需要在片段Activity
的开头或Activity
中设置侦听器。以下是一个例子。
public class Activity1 extends AppCompatActivity {
private OnAttributesUpdatedListener onAttributesUpdatedListener;
public interface OnAttributesUpdatedListener {
public void onAttributesUpdated();
}
public void setListener(OnAttributesUpdatedListener onAttributesUpdatedListener) {
this.onAttributesUpdatedListener = onAttributesUpdatedListener;
}
private void whenFinishedSomethingCallback() {
if(onAttributesUpdatedListener!=null)
onAttributesUpdatedListener.onAttributesUpdated();
}
}
public class Fragment1 extends Fragment implements Activity1.OnAttributesUpdatedListener
{
@Override
public void onAttributesUpdated() {
// Do your stuff here
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
((Activity1)getActivity()).setListener(this);
}
}
阅读片段生命周期以使用getActivity()
。片段被销毁时也会删除监听器。
如果其他Fragment
中存在Activity
,请使用LocalBroadcastManager进行通信。
答案 1 :(得分:0)
首先创建一个这样的界面:
public interface Listener{
void doSomething() }
然后在您的活动中实现此界面。
并添加
Listener listener
在你的片段中 并且在onAttach方法中使用此片段
listener=(Listener)activity
然后在需要时调用侦听器。