将进度设置为进度条

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));

totaldoublefloatsetProgress() 方法将 int 作为参数。

因此您可以执行以下操作,将 total 的类型更改为 int,

或使用:

setProgress(Math.round(total));

Math.round 函数可以与 doublefloat 一起使用,如果您将 float 传递给它,它会生成一个 int,或者 long 如果您将 double 传递给它。输出将 return 将输入四舍五入到最接近的小数的值。