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

是否可以将数据从对话片段发送到与活动相关的片段,以及如何发送?

越嘉石
2023-03-14

在我的应用程序中,我有一个对话框片段,它在启动MainActivity之前首先打开。当在该对话框片段中输入一些数据并单击“确认”时,我需要向片段(Main)发送一些值(表示双值)。

我的主要活动是查看寻呼机,它有两个片段。一个是片段(主)。。我必须将数据发送到我的对话框片段到片段(main)

片段(Main)通过viewpager附加到MainActivity。我尝试使用intent和bundle将值发送到fragment(Main)。引用站点以在片段之间传递数据。

通过使用Intents,它显示了无法显式显示的异常,并在android清单中声明

当尝试使用bundle时,获取异常bundle为null。

从这两个例外,我有可能发送数据...任何人都可以提供帮助和建议。

这是我的对话片段:

public class InputFragment extends DialogFragment {



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


@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    return super.onCreateDialog(savedInstanceState);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
   View view = inflater.inflate(R.layout.input, container, false);
    final EditText ed = (EditText)view.findViewById(R.id.editText);
    final RadioButton rb1 = (RadioButton)view.findViewById(R.id.radioButton1);
    final RadioButton rb2 = (RadioButton)view.findViewById(R.id.radioButton2);
    final Button b1 = (Button)view.findViewById(R.id.cancel);
    final Button b2 = (Button)view.findViewById(R.id.confirm);
    b2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!ed.getText().toString().equals("")) {
                if (rb1.isChecked()) {
                    int input = Integer.valueOf(ed.getText().toString());
                    double out = input / 24.0;
                    out = Double.parseDouble(new DecimalFormat("#.0").format(out));
                    Intent m = new Intent(getActivity().getBaseContext(), MainScreen.class);
                    m.putExtra("res", out);
                    getActivity().startActivity(m);

                } else if (rb2.isChecked()) {
                    int input = Integer.valueOf(ed.getText().toString());
                    double out = ((input * 2 / 3) * 0.029574);
                    out = Double.parseDouble(new DecimalFormat("#.0").format(out));
                    Intent m = new Intent(getActivity().getBaseContext(), MainScreen.class);
                    m.putExtra("res", out);
                    getActivity().startActivity(m);
                }
            }
        }
    });
    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dismiss();
        }
    });
    return view;
}

接收数据的片段(Main):

public class MainScreen extends Fragment {

double ram;
TextView gls;
MainScreen mainScreen;

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


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.main_screen, container, false);
    mainScreen = this;
    TextView textView = (TextView)view.findViewById(R.id.res);
    Intent r = getActivity().getIntent();
    double res = r.getDoubleExtra("res", 0);
    String result = Double.toString(res);
    textView.setText(result);


    ram = Double.parseDouble(textView.getText().toString());
    gls = (TextView) view.findViewById(R.id.glasses);
    FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DiaFragment df = new DiaFragment();
            df.setCallingFragment(mainScreen);
            df.show(getFragmentManager(),"Frag");
        }
    });


    return view;
}

上面我是故意的,

通过使用bundle:在我的片段中(Main)

Bundle mbundle = mainScreen.getArguments();
    double res = mbundle.getDouble("res",0);
    String result = Double.toString(res);
    textView.setText(result);

对话片段:

InputFragment inputFragment = new InputFragment();
                        Bundle bundle = new Bundle();
                        bundle.putDouble("res",out);
                        inputFragment.setArguments(bundle);

共有2个答案

余天宇
2023-03-14

1.create界面:

public interface OnReceivedData {
    public void onDataReceived(Objects objects);
}

2.create对话框:

public class Dialog extends DialogFragment {
    private OnReceivedData mData;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mData=(OnReceivedData) activity;

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        // create dialog
        senDataToActivity();
    }

    private void senDataToActivity() {
        mData.onDataReceived("your object");
    }
}

3.调用对话框:

public class MainActivity extends AppCompatActivity implements OnReceivedData  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    private void opneDialog(){
        //
    }
    @Override
    public void onDataReceived(Objects objects) {
        // receded data
        // do something
    }
}
罗绪
2023-03-14

您不能这样调用片段:

Intent m = new Intent(getActivity().getBaseContext(), MainScreen.class);

取而代之的是:

MainScreen fragment = new MainScreen();
FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); 
ft.replace(id, fragment , "MainScreen");
ft.addToBackStack("");
ft.commit();
 类似资料:
  • 我想在片段的活动中使用一些文本视图(cityField,updatedField)。我知道在活动中使用它们会更容易,但问题是,由于要获取一些JSON数据,我不得不在Fragment上加入一些代码 我已经得到了活动代码的ID 现在我想在我的片段中使用它们 所以问题是 - 这可能吗?如果可能,如何? 我已经检查了这个网站上的一些答案 - 在Android中将数据从活动发送到片段 如何使用捆绑包将数据从

  • 我需要将数据从片段发送到另一个活动 我在Homeactive下的LoadsFraank中使用此代码 在另一个活动(LoadActivity)中接收数据 但是意图没有附加条件 请看下面的截图

  • 我有一个包含EditText的片段,当我单击该EditText时,会出现一个DatePicker对话框来选择日期。 FragmentFile 对话框片段 问题是我不知道如何将数据(选定日期)从DialogFraank传递到片段? 我读了一些主题,但这并没有帮助我感到困惑(抱歉再次提出这个问题)。 主题1主题2

  • 次要活动(通过意图向主活动发送“endpoint”字符串): 主活动(从次要活动获取字符串): 在Fragment类上,我试图在TextView上显示数据: 如何修复它并将字符串从一个活动发送到另一个活动上的片段? 下面是XML:

  • 我有一个活动,它从其他活动中获取一些字符串: 这行得通。 从这个活动< code>ShowPoints中,我想将接收到的字符串< code>points发送到它的片段< code>PointsOnMap 为此,我创建了并执行以下操作: 但是,片段<code>PointsOnMap<code>的<code>字符串点 我想知道我做错了什么。我在这里阅读了其他一些帖子,似乎我正在以正确的方式做到这一点。

  • 我读了DialogFragment,然后把它做成这样的一对一。 在另一个SherlockFragment中,我接下来制作: 但是doPositiveClick()、doNegativeClick()方法希望是静态的,这对我来说不好。