朋友。我开始学习使用Android Studio和Java开发Android应用程序。现在我想尝试制作一个进度条。当应用程序启动时,我们有两个EditText字段,默认情况下第一个是100(进度条的最大值)和一个EditText字段,用于进度条的增量(这是步骤)。当我们点击开始时,它必须通过对话框显示。
我编写代码,没有更多错误,但是当我按下“开始”按钮时应用程序正在关闭。进度条无法正常工作
这是代码: activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/txt_max"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Max Value" />
<EditText
android:id="@+id/maximum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="100.0" />
<TextView
android:id="@+id/txt_increment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Increment by"/>
<EditText
android:id="@+id/increment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5.0" />
<Button
android:id="@+id/butt_Start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start" />
</LinearLayout>
这是MainActivity.java:
public class MainActivity extends AppCompatActivity {
int increment;
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startButton = (Button) findViewById(R.id.butt_Start);
startButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
EditText et = (EditText) findViewById(increment);
increment = Integer.parseInt(et.getText().toString());
dialog = new ProgressDialog(MainActivity.this);
dialog.setCancelable(true);
dialog.setMessage("Loading...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(0);
EditText max = (EditText) findViewById(R.id.maximum);
int maximum = Integer.parseInt(max.getText().toString());
dialog.setMax(maximum);
dialog.show();
Thread background = new Thread(new Runnable()
{
public void run()
{
try
{
while (dialog.getProgress() <= dialog.getMax())
{
Thread.sleep(500);
progressHandler.sendMessage(progressHandler.obtainMessage());
}
} catch (java.lang.InterruptedException e)
{
}
}
});
background.start();
}
Handler progressHandler = new Handler() {
public void handleMessage(Message msg) {
dialog.incrementProgressBy(increment);
}
};
});
}
}
答案 0 :(得分:0)
该代码存在一些错误。我将通过报告您的代码段来评论每个代码:
public class MainActivity extends AppCompatActivity {
int increment;
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startButton = (Button) findViewById(R.id.butt_Start);
startButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
EditText et = (EditText) findViewById(increment);
以下是第一个错误:并非真正的错误,但最好是在EditText
(onCreate
之外)onClick
进行反映,因为这样做每次点击EditText
时,您都会重新创建button
。
错误是两倍:您使用的是findViewById(increment)
,其中,代码中,increment是int
变量,其值实际为0
。你必须使用(正如你对按钮所做的那样)
findViewById(R.id.increment);
继续:
increment = Integer.parseInt(et.getText().toString());
dialog = new ProgressDialog(MainActivity.this);
dialog.setCancelable(true);
dialog.setMessage("Loading...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(0);
EditText max = (EditText) findViewById(R.id.maximum);
int maximum = Integer.parseInt(max.getText().toString());
此错误为xml
方:由于您假设max.getText().toString()
是Integer
,因此inputType
添加xml
number
}值。
dialog.setMax(maximum);
dialog.show();
Thread background = new Thread(new Runnable()
{
public void run()
{
try
{
while (dialog.getProgress() <= dialog.getMax())
{
Thread.sleep(500);
progressHandler.sendMessage(progressHandler.obtainMessage());
}
} catch (java.lang.InterruptedException e)
{
}
}
});
background.start();
}
Handler progressHandler = new Handler() {
public void handleMessage(Message msg) {
dialog.incrementProgressBy(increment);
}
};
});
}
}
另一件事是,最好避免命名一个与id
同名的变量,特别是因为id应该代表你所指向的控件(例如调用它&#34; EditTextMaxValueMainActivity&#34 ;,这是一个限制性示例,但它具有代表性。)
如果我可以推荐你,那么 TheNewBoston 频道/网站是最好的教程,它有几个带有Android基础知识的播放列表,它很简单而且非常明确。祝你好运!
对于其他错误,我们需要logtrace
答案 1 :(得分:-1)
我的答案就在这里:
这一行:
EditText et = (EditText) findViewById(increment);
必须更改为:
EditText et = (EditText) findViewById**(R.id.increment)**;
然后我去设计 activity_main.xml 的视图,并将增量 EditText和最大 EditText的inputType更改为数字。
并从数字中删除了小数格式。
<EditText
android:id="@+id/increment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5" />
这里我有十进制的数字,现在我删除了它们。
<EditText
android:id="@+id/maximum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="100" />