当前位置: 首页 > 知识库问答 >
问题:

如何使用接口将数据从Dialogfra片段获取到片段

邹嘉荣
2023-03-14

我正在尝试通过将数据与接口传递给片段来将数据从对话片段获取到片段。到目前为止,我知道首先是因为它的片段,我需要在MainActive上实现接口,并从那里将数据发送到我想要的任何片段。我明白,但我不知道如何做到这一点。到目前为止,我已经在MainActive中实现了接口,我正在获取数据,但我不知道如何将其发送到片段。

主要活动

     public class MainActivity extends AppCompatActivity
    implements ChangeProfileImgDialog.OnPhotoReceivedListener{
    //these the methods that i implement
       @Override
public void getImagePath(Uri imagePath) {
    Log.d("imagepath",imagePath.toString());
}

@Override
public void getImageBitmap(Bitmap bitmap) {
    Log.d("imagepath",bitmap.toString());
}

对话片段-此对话片段从画廊/相机获取图片

  public class ChangeProfileImgDialog extends DialogFragment {

      public interface OnPhotoReceivedListener{
    public void getImagePath(Uri imagePath);
    public void getImageBitmap(Bitmap bitmap);


}

OnPhotoReceivedListener mOnPhotoReceived;

     @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    /*
    Results when selecting new image from phone memory
     */
    if(requestCode == PICKFILE_REQUEST_CODE && resultCode == Activity.RESULT_OK){
        Uri selectedImageUri = data.getData();
        Log.d(TAG, "onActivityResult: image: " + selectedImageUri);
            //send the uri and fragment to the interface
            mOnPhotoReceived.getImagePath(selectedImageUri);
            getDialog().dismiss();
    }

    else if(requestCode == CAMERA_REQUEST_CODE && resultCode == Activity.RESULT_OK){
        Log.d(TAG, "onActivityResult: done taking a photo.");

        Bitmap bitmap;
        bitmap = (Bitmap) data.getExtras().get("data");
        //send the bitmap and fragment to the interface
        mOnPhotoReceived.getImageBitmap(bitmap);
        getDialog().dismiss();
    }
}

@Override
public void onAttach(Context context) {
    try{
        mOnPhotoReceived = (OnPhotoReceivedListener)this.getActivity();
    }catch (ClassCastException e){
        Log.e(TAG, "onAttach: ClassCastException: " + e.getMessage(), e.getCause() );
    }
    super.onAttach(context);
}

片段-此片段应从dialogfragment获取数据。但它应该来自主要活动。

    public class MyAccountFragment extends Fragment implements View.OnClickListener,
                                       ChangeProfileImgDialog.OnPhotoReceivedListener{

  @Override
public void getImagePath(Uri imagePath) {
    if( !imagePath.toString().equals("")){
        mSelectedImageUri = imagePath;
        mSelectedImageBitmap = null;
        Log.d(TAG, "getImagePath: got the image uri: " + mSelectedImageUri);
    }
}

@Override
public void getImageBitmap(Bitmap bitmap) {
    if(bitmap != null){
        mSelectedImageUri = null;
        mSelectedImageBitmap = bitmap;
        Log.d(TAG, "getImageBitmap: got the image bitmap: " + mSelectedImageBitmap);
    }
}

我希望您理解我的意思,我想做的只是将数据从dialogfragment获取到片段。由于其片段和im使用接口,我需要在MainActivity中实现此接口,然后了解如何将数据移动到片段。知道如何将数据移动到片段中吗?

共有2个答案

彭俊智
2023-03-14

首先创建一个界面

public interface CallBackInterface{
    public void OnCustomerDetailsCallback(String getDetailsData);
}

然后在MyAccountFragment中实现此接口

像这样从MyAccount调用DialogFraank

 android.support.v4.app.FragmentManager fm=getActivity().getSupportFragmentManager();
        dialogFragment dFragment = new dialogFragment ();
        if (dFragment != null) {
            dFragment.onAttachToParentFragment(this);
        }
        dFragment.setArguments(bundle);
        dFragment.show(fm, "Dialog Fragment");

 }

在对话框FragmendFragment中

   public void onAttachToParentFragment(CallBackInterface callBackInterface) {
        if (callBackInterface != null) {
            try {
                this.callBackInterface= callBackInterface;
            } catch (ClassCastException e) {
                throw new ClassCastException(
                        callBackInterface.toString() + " must implement Callback");
            }
        }

在对话框片段中所需的位置使用回调函数

callBackInterface.onClickAtOKButton(your data);
裴欣然
2023-03-14

您可以为片段添加检查。每当您在Mainactive中的覆盖方法中获得回调时,请使用getSupportFragmentManager(). findFragmentById(传递容器的id)或可以使用getSupportFragmentManager(). findFragmentByTag(传递您的片段标签名称)如下:-

Fragment fragment = getSupportFragmentManager().findFragmentById(//pass the id of the container)
if(fragment instanceOf MyAccountFragment){
//after this 
fragment.sendDataToFragment(//Your data);
}
 类似资料:
  • 想象一下,我有FragmentA,我从它开始DialogFraank(框中有)。如何将中的值取回FragmentA?我尝试制作这样的东西,但我没有成功。

  • 在适配器中 Holder.NameExam2.SetOnClickListener(新建View.OnClickListener(){ 成碎片 @覆盖公共视图onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){ 它在getString()中调用空指针异常。如何解决。

  • 我有两个活动,在活动1中有碎片,在活动2中有碎片 fragment1和fragment2扩展自FragmentActivity1,activity2扩展自AppCompatActivity 我想将字符串值从fragment1发送到fragment2,而不获取空值。我希望你能理解这个问题。谢谢

  • 我有一个DialogFragment,它使用FragmentPagerAdapter来显示选项卡。每个选项卡都有一个使用RecyclerView的不同片段。我可以获取单击后传递给片段的项目,但如何才能将数据从片段获取到DialogFragment,以便将其传递给调用活动? TabDialog扩展DialogFraank: TabAdapter扩展了FragmentPagerAdapter 在Fra

  • 似乎有很多与这个主题相关的问题。当我阅读大部分时,我有一个问题。通常人们试图制作一个片段,然后从那里生成一个对话片段。所以对话片段在片段中。 在我的例子中,我创建了一个按钮,用于打开工具栏上的dialogfragment。然后我从导航栏打开我的主要片段。因此dialogfragment和我的主片段通过相同的主活动被调用,只是在不同的地方。我无法从片段内部调用对话框片段,因为它在选择菜单选项时被调用