我想在弹出窗口消失后做一些事情。但是,我得到了错误。求你帮帮我..
Main.java
public class Main extends Fragment implements SendStringEvent{
Button addButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.teacher_category, container, false);
addButton = (Button) rootView.findViewById(R.id.add_category_button);
addButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
TEACHER_AddCategory teacherAddCategory = new TEACHER_AddCategory();
teacherAddCategory.show(getFragmentManager(), "TEACHER_AddCategory");
}
});
return rootView;
}
//This method from interface SendStringEvent
@Override
public void eventAfterMessageClosed(String message) {
//I get error when executing this
addButton.setText(message);
}
}
TEACHER_AddCategory.java (POP UP)
public class TEACHER_AddCategory extends DialogFragment {
Button OKButton;
EditText editText;
private SendStringEvent eventMessageClosed;
Fragment fragment = new Main();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(seamolec.ujianonline.R.layout.teacher_add_category, container);
OKButton = (Button) view.findViewById(seamolec.ujianonline.R.id.ok_button);
try {
eventMessageClosed = (SendStringEvent) fragment;
}
catch(ClassCastException e) {
e.printStackTrace();
}
OKButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
eventMessageClosed.eventAfterMessageClosed("test");
dismiss();
}
}
});
return view;
}
}
这是接口SendStringEvent.java
public interface SendStringEvent {
void eventAfterMessageClosed(String message);
}
弹出窗口消失且系统正在执行时出现错误“eventAfterMessageClosed()”
Log Cat:
答案 0 :(得分:0)
它的发生是因为你试图从一个甚至没有加载的新实例调用该方法,因此尚未创建视图。
更改
try {
eventMessageClosed = (SendStringEvent) fragment;
}
catch(ClassCastException e) {
e.printStackTrace();
}
到
Fragment fr = getFragmentManager().findFragmentById(R.id.where_fragment_is_loaded) // Change as per you layout
if(fr != null && fr instanceOf SendStringEvent)
eventMessageClosed = (SendStringEvent) fr;
并改变
eventMessageClosed.eventAfterMessageClosed("test");
到
if(eventMessageClosed != null)
eventMessageClosed.eventAfterMessageClosed("test");
注意: R.id.where_fragment_is_loaded
是指示性的。使用您加载片段Main
的ID。如果您使用支持库,也请使用getSupportFragmentManager()
。