片段和活动之间没有传递值

Posted

技术标签:

【中文标题】片段和活动之间没有传递值【英文标题】:Values not being passed between fragment and activity 【发布时间】:2013-12-27 11:04:23 【问题描述】:

我有一个带有 2 个选项卡的选项卡式布局。每个选项卡可以收集一些双精度形式的数据,例如 52.363。当在任一选项卡中按下按钮时,它们会打开一个新活动,其中显示在前一个选项卡中输入的数字。但是,当我按下提交按钮时,没有显示值。关于为什么的任何想法?

片段选项卡代码(两个选项卡目前相同,不言自明的部分也省略了):

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        View view;
        view = inflater.inflate(R.layout.advfrag_layout, container, false);
        return view;
    

@Override
public void onActivityCreated(Bundle savedInstanceState) 
    super.onActivityCreated(savedInstanceState);

    inSnow = (EditText) getView().findViewById(R.id.inchesSnow);
    calc = (Button) getView().findViewById(R.id.button);
    results = (TextView) getView().findViewById(R.id.resultView);
    calc.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View v) 
                    try
                        inchSnow = Double.parseDouble(inSnow.getText().toString());
                    catch (NumberFormatException ex)
                        results.setText("Field Blank!");

                    
                Intent intent = new Intent(getActivity().getBaseContext(), ResultPost.class);
                intent.putExtra("inchSnow", inchSnow);
                getActivity().startActivity(intent);
        
    );


数据发送到的活动,ResultPost.Class(同样,只有必要部分):

public class ResultPost extends ActionBarActivity 

 protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result_post);
        AdvancedFragment advancedFragment= new AdvancedFragment();

        Intent intent = getIntent();
        double inchesn = intent.getDoubleExtra("inchSnow", 0);
    

ResultPost.Class 继续更改 textview 以显示此数据,但 textview 的值仍为“0”,即使我给它赋予了不同的值(例如 6),它也是默认值。

【问题讨论】:

您已经确认intent.putExtra("inchSnow", inchSnow); 输入了正确的值? 我如何验证这一点?我已将双精度 inchSnow 定义为程序中的一个值,但它从未出现在 ResultPost.Class 中。我确实知道inchSnow 有一个与之关联的值,因为我在片段中有一个TextView,它显示了用于测试目的的输入值。 您是否尝试过单步执行代码并检查放入意图的值? 不要使用getActivity().getBaseContext(),使用getActivity(),仅此而已。 @Szymon 非常感谢您提醒我逐步完成代码。我很快就发现了一个愚蠢的错误!有没有办法删除这个问题? 【参考方案1】:

试试这样:

public class ResultPost extends ActionBarActivity 

 protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result_post);
        AdvancedFragment advancedFragment= new AdvancedFragment();

        Intent intent = getIntent();
        double inchesn = intent.getDoubleExtra("inchSnow",0.0);
    

【讨论】:

以上是关于片段和活动之间没有传递值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Fragment 之间传递值

如何将值从片段/活动传递到 xml?

如何在活动和片段之间传递对象

在另一个活动托管的片段之间传递数据的最佳实践

如何将活动值传递给片段[重复]

将微调器值从片段传递到活动