使用Android标签将信息从一个片段传递到另一个片段

时间:2014-02-05 07:00:11

标签: android android-fragments android-tabhost

我创建了一个基本的Android应用程序,它使用TabHost并包含两个选项卡。第一个选项卡有一个用于输入2个值的片段,第二个选项卡有一个片段,其中包含:用于查看解决方案的按钮,用于显示解决方案的TextView以及用于重置两个片段中所有值的按钮。第一次浏览应用程序时,一切似乎都顺利运行。第一次查看解决方案后问题就开始了。如果我尝试输入两个新数字,然后单击以查看解决方案,我会看到TextView的最后一个值(""如果已按下重置,或未按下重置时的上一个答案)。我们非常感谢您对我可能需要更改的任何建议。如果需要任何其他代码,请告诉我。提前致谢。

注意:所有片段都导入android.support.v4.app.Fragment。

InputFragment.java

public class InputFragment extends Fragment {

public static String answerString = "";
public static EditText e1;
public static EditText e2;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_input,container, false);
    EditText et1 = (EditText)view.findViewById(R.id.editText1);
    EditText et2 = (EditText)view.findViewById(R.id.editText2);
    setEt(et1, et2);
    return view;
}   

public void setEt(EditText a, EditText b) {
    e1 = a;
    e2 = b;
}   
}

SolutionFragment.java:

public class SolutionFragment extends Fragment {

public String answer;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_solution,container,false);
    updateAnswer();
    Button b1 = (Button)view.findViewById(R.id.button1);//get answer button
    b1.setOnClickListener(new OnClickListener() {           
        @Override
        public void onClick(View v) {
            setText(answer);
        }
    });

    Button b2 = (Button)view.findViewById(R.id.button2);//reset button
    b2.setOnClickListener(new OnClickListener() {           
        @Override
        public void onClick(View v) {
            setText("");
            InputFragment.e1.setText("");
            InputFragment.e2.setText("");
            answer = "";
        }
    });
    return view;
}

public void updateAnswer() {
    String s1 = InputFragment.e1.getText().toString();
    String s2 = InputFragment.e2.getText().toString();
    double num1 = Double.parseDouble(s1);
    double num2 = Double.parseDouble(s2);
    double ans = num1 + num2;
    String ansS = String.valueOf(ans);
    answer = ansS;
}

public void setText(String s) {
    TextView tv = (TextView)getView().findViewById(R.id.textView2);
    tv.setText(s);
}
}

1 个答案:

答案 0 :(得分:0)

根据Shayan Pourvatan(How to pass values between Fragments)提供的链接,看起来简单的方法是能够:

1)创建一个包含您想要传递的信息的“捆绑”。 2)从有权访问片段实例的某个位置,使用bundle调用setArguments()。 3)通过调用getArguments();读取片段中onCreateView()期间的参数;

真的,我只关注第5步以及链接文章中列出的部分。因为你将在标签之间翻转,我认为这种方法应该适合你。在切换选项卡之前设置参数,然后在切换到目标选项卡时调用getArguments()。

如果有帮助,请告诉我!