将进度设置为进度条
Set progress to progress bar
在activity中,它有一个ListView
,其中ListView
项目包括3 TextView
(monthAndYear,totalUsed(RM20), and budget(RM123.0 )), 和一个 ProgressBar
。我尝试使用下面的代码来显示 ProgressBar
中的进度,但什么也没发生。
public void retrieveList(String name) {
search.clear();
database = mdb.getReadableDatabase();
Cursor cursor = database.rawQuery("SELECT * FROM " + MyDatabaseHelper.TABLE__TASK + " WHERE Name = ? ", new String[]{name}, null);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
int iD = cursor.getInt(cursor.getColumnIndex("ID"));
String month = cursor.getString(cursor.getColumnIndex("Month"));
double budget = cursor.getDouble(cursor.getColumnIndex("Budget"));
double totalUsed=cursor.getDouble(cursor.getColumnIndex("Total_Used"));
if (adapter != null) {
adapter.add(iD,month,budget,totalUsed);
listview.setAdapter(adapter);
}
}
}
}
适配器
public void add(int id,String month,double budget,double used)
{
List obj = new List(id,month,budget,used);
obj.setMonthYear(" " + month);
obj.setBudget(budget);
obj.setUsed(used);
total = budget - used;
obj.setProgress(total);
search.add(obj);
this. notifyDataSetChanged();
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder =null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.expenses_adapter, null);
holder= new ViewHolder();
holder.monthAndYear = (TextView) convertView.findViewById(R.id.monthAndYear);
holder.budget = (TextView) convertView.findViewById(R.id.budget);
holder.amount=(TextView)convertView.findViewById(R.id.amount);
holder.progressBar=(ProgressBar)convertView.findViewById(R.id.downloadProgressBar);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.monthAndYear.setText(search.get(position).getMonthAndYear());
holder.budget.setText("RM"+""+search.get(position).getBudget());
holder.amount.setText("RM"+""+search.get(position).getUsed());
return convertView;
}
static class ViewHolder {
TextView monthAndYear, budget,amount;
ProgressBar progressBar;
}
我在 holder.amount.setText("RM"+""+search.get(position).getUsed());
后添加 holder.progressBar.setProgress(Integer.parseInt(total+""));
后,应用程序崩溃了。
错误
java.lang.NumberFormatException: Invalid int: "1.0"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:375)
at java.lang.Integer.parseInt(Integer.java:366)
at java.lang.Integer.parseInt(Integer.java:332)
at com.example.tony.monthlyexpenses.adapter.ExpensesAdapter.getView(ExpensesAdapter.java:106)
at android.widget.AbsListView.obtainView(AbsListView.java:2232)
holder.progressBar.setProgress(Integer.parseInt(total+""));
这行给你一个错误。您试图将“1.0”的字符串解析为整数,但值 1.0 是浮点类型。
试试这样:
取 Float 值并将其四舍五入。这将 return 整数
Math.round(Float.parseFloat(total+""))
只需更改:
Integer.parseInt(total+"")
至:
(int) total
或者,如果你想更精确:
Math.round(total)
你必须更换:
holder.progressBar.setProgress(Integer.parseInt(total+""));
与:
holder.progressBar.setProgress(Math.round(total));
值 total
是 double
或 float
,setProgress()
方法将 int
作为参数。
因此您可以执行以下操作,将 total
的类型更改为 int
,
或使用:
setProgress(Math.round(total));
Math.round
函数可以与 double
或 float
一起使用,如果您将 float
传递给它,它会生成一个 int
,或者 long
如果您将 double
传递给它。输出将 return 将输入四舍五入到最接近的小数的值。
在activity中,它有一个ListView
,其中ListView
项目包括3 TextView
(monthAndYear,totalUsed(RM20), and budget(RM123.0 )), 和一个 ProgressBar
。我尝试使用下面的代码来显示 ProgressBar
中的进度,但什么也没发生。
public void retrieveList(String name) {
search.clear();
database = mdb.getReadableDatabase();
Cursor cursor = database.rawQuery("SELECT * FROM " + MyDatabaseHelper.TABLE__TASK + " WHERE Name = ? ", new String[]{name}, null);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
int iD = cursor.getInt(cursor.getColumnIndex("ID"));
String month = cursor.getString(cursor.getColumnIndex("Month"));
double budget = cursor.getDouble(cursor.getColumnIndex("Budget"));
double totalUsed=cursor.getDouble(cursor.getColumnIndex("Total_Used"));
if (adapter != null) {
adapter.add(iD,month,budget,totalUsed);
listview.setAdapter(adapter);
}
}
}
}
适配器
public void add(int id,String month,double budget,double used)
{
List obj = new List(id,month,budget,used);
obj.setMonthYear(" " + month);
obj.setBudget(budget);
obj.setUsed(used);
total = budget - used;
obj.setProgress(total);
search.add(obj);
this. notifyDataSetChanged();
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder =null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.expenses_adapter, null);
holder= new ViewHolder();
holder.monthAndYear = (TextView) convertView.findViewById(R.id.monthAndYear);
holder.budget = (TextView) convertView.findViewById(R.id.budget);
holder.amount=(TextView)convertView.findViewById(R.id.amount);
holder.progressBar=(ProgressBar)convertView.findViewById(R.id.downloadProgressBar);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.monthAndYear.setText(search.get(position).getMonthAndYear());
holder.budget.setText("RM"+""+search.get(position).getBudget());
holder.amount.setText("RM"+""+search.get(position).getUsed());
return convertView;
}
static class ViewHolder {
TextView monthAndYear, budget,amount;
ProgressBar progressBar;
}
我在 holder.amount.setText("RM"+""+search.get(position).getUsed());
后添加 holder.progressBar.setProgress(Integer.parseInt(total+""));
后,应用程序崩溃了。
错误
java.lang.NumberFormatException: Invalid int: "1.0"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:375)
at java.lang.Integer.parseInt(Integer.java:366)
at java.lang.Integer.parseInt(Integer.java:332)
at com.example.tony.monthlyexpenses.adapter.ExpensesAdapter.getView(ExpensesAdapter.java:106)
at android.widget.AbsListView.obtainView(AbsListView.java:2232)
holder.progressBar.setProgress(Integer.parseInt(total+""));
这行给你一个错误。您试图将“1.0”的字符串解析为整数,但值 1.0 是浮点类型。
试试这样: 取 Float 值并将其四舍五入。这将 return 整数
Math.round(Float.parseFloat(total+""))
只需更改:
Integer.parseInt(total+"")
至:
(int) total
或者,如果你想更精确:
Math.round(total)
你必须更换:
holder.progressBar.setProgress(Integer.parseInt(total+""));
与:
holder.progressBar.setProgress(Math.round(total));
值 total
是 double
或 float
,setProgress()
方法将 int
作为参数。
因此您可以执行以下操作,将 total
的类型更改为 int
,
或使用:
setProgress(Math.round(total));
Math.round
函数可以与 double
或 float
一起使用,如果您将 float
传递给它,它会生成一个 int
,或者 long
如果您将 double
传递给它。输出将 return 将输入四舍五入到最接近的小数的值。