如何在活动中调用片段方法

时间:2017-04-07 12:25:51

标签: android android-layout android-studio android-fragments

我的片段中有一个对话框方法,我想从我的主要活动FAB中调用。

我试着打电话给它,但得到了这个错误;

Attempt to invoke virtual method 'android.view.LayoutInflater android.support.v4.app.FragmentActivity.getLayoutInflater()' on a null object reference

editProfileDialog()是我尝试在主要活动中调用的片段中的对话框方法。

public class Edit_fragment extends Fragment {

private EditPresenter mEditPresenter;

public Edit_fragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.edit_profile_fragment, container, false);
    ButterKnife.bind(this, view);

    mEditPresenter = new EditPresenter(this);
    mEditPresenter.onCreate();

    return view;
}


public void editProfileDialog(){
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View dialoglayout = inflater.inflate(R.layout.edit_profile_dialogue, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setView(dialoglayout);
    builder.setCancelable(true);

    TextView edit_profile = (TextView)dialoglayout.findViewById(R.id.edit_me);
    Typeface Sms = Typeface.createFromAsset(getActivity().getAssets(), "fonts/FTLTLT.TTF");
    edit_profile.setTypeface(Sms);

    TextView new_profile_photo = (TextView)dialoglayout.findViewById(R.id.addAvatar);
    new_profile_photo.setTypeface(Sms);


    TextView edit_username = (TextView)dialoglayout.findViewById(R.id.editUsernameBtn);
    edit_username.setTypeface(Sms);

    TextView Change_bio = (TextView)dialoglayout.findViewById(R.id.statusLayout);
    Change_bio.setTypeface(Sms);

    final AlertDialog dialog = builder.create();

    new_profile_photo.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            dialog.dismiss();
            editPhotoDialog();
        }
    });

    edit_username.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            dialog.dismiss();

        }
    });

    Change_bio.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            dialog.dismiss();

        }
    });


    dialog.show();
}

private void editPhotoDialog(){
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View dialoglayout = inflater.inflate(R.layout.edit_photo_dialogue, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setView(dialoglayout);
    builder.setCancelable(true);

    FrameLayout cameraBtn = (FrameLayout)dialoglayout.findViewById(R.id.cameraBtn);

    FrameLayout galleryBtn = (FrameLayout)dialoglayout.findViewById(R.id.galleryBtn);

    AppCompatTextView cameraBtnTxt = (AppCompatTextView)dialoglayout.findViewById(R.id.cameraBtnTxt);
    Typeface Sms = Typeface.createFromAsset(getActivity().getAssets(), "fonts/FTLTLT.TTF");
    cameraBtnTxt.setTypeface(Sms);


    AppCompatTextView galleryBtnText = (AppCompatTextView)dialoglayout.findViewById(R.id.galleryBtnText);
    galleryBtnText.setTypeface(Sms);

    final AlertDialog dialog = builder.create();

    cameraBtn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            dialog.dismiss();
            setCameraBtn();
        }
    });

    galleryBtn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            dialog.dismiss();
            setGalleryBtn();
        }
    });

    dialog.show();
}

private void setGalleryBtn() {
    if (PermissionHandler.checkPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)) {
        AppHelper.LogCat("Read data permission already granted.");
        new PickerBuilder(getActivity(), PickerBuilder.SELECT_FROM_GALLERY)
                .setOnImageReceivedListener(imageUri -> {
                    Intent data = new Intent();
                    data.setData(imageUri);
                    AppHelper.LogCat("new image SELECT_FROM_GALLERY" + imageUri);
                    mEditPresenter.onActivityResult(this, AppConst.SELECT_PROFILE_PICTURE, RESULT_OK, data);

                })
                .setImageName(getActivity().getString(R.string.app_name))
                .setImageFolderName(getActivity().getString(R.string.app_name))
                .setCropScreenColor(R.color.colorPrimary)
                .withTimeStamp(false)
                .setOnPermissionRefusedListener(() -> {
                    PermissionHandler.requestPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);
                })
                .start();

    } else {
        AppHelper.LogCat("Please request Read data permission.");
        PermissionHandler.requestPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);
    }

}



private void setCameraBtn() {
    if (PermissionHandler.checkPermission(getActivity(), Manifest.permission.CAMERA)) {
        AppHelper.LogCat("camera permission already granted.");
        new PickerBuilder(getActivity(), PickerBuilder.SELECT_FROM_CAMERA)
                .setOnImageReceivedListener(imageUri -> {

                    AppHelper.LogCat("new image SELECT_FROM_CAMERA " + imageUri);
                    Intent data = new Intent();
                    data.setData(imageUri);
                    mEditPresenter.onActivityResult(this, AppConst.SELECT_PROFILE_CAMERA, RESULT_OK, data);

                })
                .setImageName(getActivity().getString(R.string.app_name))
                .setImageFolderName(getActivity().getString(R.string.app_name))
                .setCropScreenColor(R.color.colorPrimary)
                .withTimeStamp(false)
                .setOnPermissionRefusedListener(() -> {
                    PermissionHandler.requestPermission(getActivity(), Manifest.permission.CAMERA);
                })
                .start();
    } else {
        AppHelper.LogCat("Please request camera  permission.");
        PermissionHandler.requestPermission(getActivity(), Manifest.permission.CAMERA);
    }
}

}

在我的main_activity中的fab.setOnClickListener()上。我这样调用了editProfileDialog();

mEdit_profile_fragment.editProfileDialog();

并且在LOGCAT中出现了错误。

4 个答案:

答案 0 :(得分:1)

LayoutInflater inflater=(LayoutInflater)getActivity().getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialoglayout = inflater.inflate(R.layout.edit_profile_dialogue, null);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setView(dialoglayout);
builder.setCancelable(true);

答案 1 :(得分:0)

试试这种方式..

   Edit_fragment homeFragment = (Edit_fragment) getSupportFragmentManager().findFragmentByTag(Edit_fragment.class.getSimpleName());

   if(fragment != null){
                fragment.editProfileDialog();
   }

答案 2 :(得分:0)

使用此,

LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE );

答案 3 :(得分:-1)

将您的方法更改为:

    public void editProfileDialog(Context context){
    LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

   View dialoglayout = inflater.inflate(R.layout.edit_profile_dialogue, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setView(dialoglayout);
    builder.setCancelable(true);

这是因为getActivity()在活动类中不可用。