【问题标题】:onAttach() activity parameter null?onAttach() 活动参数为空?
【发布时间】: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


    【解决方案1】:

    我邀请您的 onAttach 返回空指针异常。这是因为您的父 Activity 主要 Activity 没有实现您的自定义接口,所以它返回 null。看看下面的代码,如果它对你有帮助,请告诉我:

        public class MainActivity extends FragmentActivity implements EditItemFragment.EditedItemClickedListener{ 
           private DialogFragment editItemDialog;
         //Do your code here
           @Override
            public void onEditItemClicked() {
                editFinish();
            }
    
          public void showDialog(){
               //this is for showing your custom dialog fragment
             editItemDialog = EditItemFragment.newInstance();
             editItemDialog.show(getSupportFragmentManager(),"editItemDialog");
          }
    
    }
    

    这是给你的 EditItemFragment:

        public class EditItemFragment extends DialogFragment{
           //Do your code here
    
        public static EditItemFragment newInstance(){
             EditItemFragment editItemDialog = new EditItemFragment();
             return editItemDialog;
         }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多