我想将数据从活动传输到片段,然后在片段中显示数据。我的代码不起作用

时间:2015-03-11 17:47:56

标签: java android android-fragments android-fragmentactivity

Activity类是MainActivity.java,Fragment类是frganswer.java。我使用edittext在活动中获取两个数字然后我需要在片段中显示它的总和。没有错误,但是当我尝试在AVD上运行时,它会“没有响应”。请指出我的错误。

MainActivty.java

public class MainActivity extends FragmentActivity {
    String aa,bb;
    double a,b,c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText editText1=(EditText) findViewById(R.id.no1);
        aa=editText1.getText().toString();
        EditText editText2=(EditText) findViewById(R.id.no2);
        bb=editText2.getText().toString();
        }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public void add(View view)
    {   
    a=Integer.parseInt(aa);
    b=Integer.parseInt(bb);
    c=a+b;
    send(c);
    }
    public void send(double c)
    {
        Bundle bundle=new Bundle();
        bundle.putDouble("", c);
        frganswer ob=new frganswer();
        ob.setArguments(bundle);
    }


 }

frganswer.java

public class frganswer extends Fragment {
        public View onCreateView(LayoutInflater inflater, 
           ViewGroup container, Bundle savedInstanceState) {

            // Inflate the layout for this fragment
            View view =  inflater.inflate(R.layout.activity_fragment_answer, 
                                     container, false);

            double c=getArguments().getDouble("");
            String ans=String.valueOf(c);
            TextView t = (TextView) view.findViewById(R.id.textView1);
            t.setText(ans);


            return view;
         }
  }

activity_main.xml中

    <EditText
        android:id="@+id/no1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/app_name"
        android:layout_marginTop="14dp"
        android:ems="10"
        android:hint="@string/no1"
        android:inputType="numberDecimal" />

    <EditText
        android:id="@+id/no2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/no1"
        android:layout_marginTop="18dp"
        android:ems="10"
        android:hint="@string/no2"
        android:inputType="numberDecimal" />

     <fragment
        android:id="@+id/frg_1"
        android:name="com.example.calculator.frganswer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/add"
        android:layout_below="@+id/add"
        android:layout_marginTop="61dp"
        tools:layout="@layout/activity_fragment_answer" />
    <Button
        android:id="@+id/add"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/no2"
        android:layout_below="@+id/no2"
        android:layout_marginTop="20dp"
        android:text="@string/add"
        android:onClick="add" 

</RelativeLayout>

activity_fragment_answer.xml

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="32dp"
        android:scrollHorizontally="true"
        android:selectAllOnFocus="true"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

移动此行

aa=editText1.getText().toString();

和这一行

bb=editText2.getText().toString();

进入你的add()方法。我假设您的应用程序崩溃,因为您尝试在null或空时解析整数。您应该有一个错误日志,显示它崩溃的行,以便将来帮助您解决此类问题。

答案 1 :(得分:0)

由于您的片段是以XML格式声明的,因此当您在send()中创建新实例时,它无处可去。而是在send()方法中执行以下操作:

public void send(double c)
{
    frganswer ob= (frganswer) getFragmentManager().findFragmentById(R.id.frg_1);;
    ob.displaySum(c);
}

并在您的frganswer添加方法

public void displaySum(double c) {
   String ans=String.valueOf(c);
   ((TextView) view.findViewById(R.id.textView1)).setText(ans);
}

另请注意,根据Java约定,类名应从大写字母Frganswer

开始

另外: @ Marche101也是对的。在单击按钮后,您应该仅提取aa and bb 按钮的值,并检查EditText中输入的值是否为空,是否合法等。无需执行任何操作片段args中的onCreate(),因为它与您的案例无关。