【发布时间】:2014-06-23 10:34:16
【问题描述】:
我有一个主要活动类,以及主要活动中的一个私有内部类。私有内部类具有在调用时将显示片段的方法。这个内部类实现了在 Fragment 的类中定义的接口,用作一种回调。通过代码显示可能是最容易的。
public class MainActivity extends FragmentActivity {
//on a button clicked
EditItemManger em = new EditItemManager();
em.begin();
private class EditItemManager implements on EditItemFragment.EditedItemClickedListener{
//consructor, other stuff. no onCreate method because this inner class does not (explicity??) extend activty
public void begin(){
EditItemFragment editItemFrag = new EditItemFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(editItemFrag, EDIT_FRAG_TAG)
fragmentTransaction.commit();
}
@Override
public void onEditItemClicked() {
editFinish();
}
public void editFinish()
{
// other stuff
}
}
}
我的 EditItemFragment 类,其中 onAttach 方法总是有一个空活动参数
public class EditItemFragment extends DialogFragment {
protected EditedItemClickedListener editedItemClickedListener;
protected ImageButton button;
public EditItemFragment(){}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
final Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.edit_name_fragment, container, false);
button = (ImageButton) view.findViewById(R.id.submit_new_item_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editedItemClickedListener.onEditedItemButtonClicked();
}
});
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
editedItemClickedListener= (EditedItemClickedListener) activity;
} catch (ClassCastException e) {
e.printStackTrace();
}
}
public interface OnEditNameButtonClickedListener {
public void onEditNameButtonClicked();
}
所以因为我的 Fragment 类中 onAttach() 中的参数始终为空,最终导致空指针异常。我想知道是否是因为片段是从不扩展活动的类中调用的。问题是,如果这个类扩展了活动,那么尝试提交 Fragment Transaction 就会出现问题
【问题讨论】:
标签: android android-activity android-fragments