新建MainActivity,放置两个 EditText控件、一个Button控件 输入两个整数; 单击按钮跳转到CalcActivity, 根据输入的两个整数 计算两者因子中乘积最大的,利用 进度条控件模拟计算过程,将结果 返回给MainActivity。
时间: 2024-09-30 08:03:03 浏览: 25
创建一个名为`MainActivity`的新活动布局,你可以按照以下步骤操作:
1. **添加布局文件**:
- 在res/layout目录下,创建一个新的布局文件,如activity_main.xml。在这个文件中,设置一个`LinearLayout`作为根布局,并垂直排列三个组件:两个EditText用于用户输入整数,一个Button作为触发计算的按钮,以及一个ProgressBar表示计算进度。
```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入第一个整数"/>
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入第二个整数"/>
<Button
android:id="@+id/buttonCalculate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="计算最大乘积"/>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false" />
</LinearLayout>
```
2. **编写MainActivity.java**:
- 在MainActivity.java中,你需要处理点击事件,获取用户输入,启动新活动并在返回结果时更新UI。这里使用AsyncTask进行后台计算,避免阻塞主线程。
```java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity {
private EditText editText1, editText2;
private Button buttonCalculate;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = findViewById(R.id.editText1);
editText2 = findViewById(R.id.editText2);
buttonCalculate = findViewById(R.id.buttonCalculate);
progressBar = findViewById(R.id.progressBar);
buttonCalculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String num1 = editText1.getText().toString();
String num2 = editText2.getText().toString();
if (isValidInput(num1, num2)) {
new CalculateMaxProductTask().execute(num1, num2);
} else {
Toast.makeText(MainActivity.this, "请输入有效的整数", Toast.LENGTH_SHORT).show();
}
}
});
}
// 假设isValidInput检查输入是否为整数
private boolean isValidInput(String num1, String num2) {
return !num1.isEmpty() && !num2.isEmpty() && isInteger(num1) && isInteger(num2);
}
private class CalculateMaxProductTask extends AsyncTask<String, Integer, Integer> {
@Override
protected Integer doInBackground(String... input) {
int num1 = Integer.parseInt(input[0]);
int num2 = Integer.parseInt(input[1]);
// 模拟计算过程,这里省略真实计算部分
for (int i = num1; i <= num2; i++) {
publishProgress(i);
try {
Thread.sleep(500); // 延迟模拟计算
} catch (InterruptedException e) {
e.printStackTrace();
}
}
int maxProduct = findMaxProductFactorial(num1, num2);
return maxProduct;
}
// 真实的计算最大乘积因子方法
private int findMaxProductFactorial(int a, int b) {
// 实现细节...
}
@Override
protected void onProgressUpdate(Integer... values) {
progressBar.setProgress(values[0]);
}
@Override
protected void onPostExecute(Integer result) {
progressBar.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, "最大乘积因子是: " + result, Toast.LENGTH_SHORT).show();
}
}
// ...其他方法和生命周期管理
}
```
阅读全文