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>
答案 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()
,因为它与您的案例无关。