2016-12-30 6 views
-4

В деятельности, она имеет ListView где ListView элемент состоит из 3 TextView (monthAndYear, totalUsed (RM20) и бюджет (RM123.0)), и ProgressBar. Я попытался сделать код ниже, чтобы показать прогресс в ProgressBar, но ничего не произошло.Установить прогресс прогресс бар

enter image description here

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.progressBar.setProgress(Integer.parseInt(total+"")); после holder.amount.setText("RM"+""+search.get(position).getUsed());, приложение разбился.

Ошибка

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) 

ответ

2

holder.progressBar.setProgress(Integer.parseInt(total+"")); Эта линия дает вам сообщение об ошибке. Вы пытаетесь проанализировать String, который является «1.0», в Integer, но значение 1.0 является типом float.

Попробуйте следующее: Возьмите значение Float и обведите его вокруг. Это вернет Integer

Math.round(Float.parseFloat(total+""))

2

Просто измените:

Integer.parseInt(total+"") 

к:

(int) total 

или, если вы хотите быть более точным:

Math.round(total) 
+0

Он не может прямо берет String до int, поскольку итоговое значение имеет значение String –

+0

Я предположил, что это float или double из-за + "" –

+0

И это на самом деле, так как вы можете видеть total = budget - used, где используется бюджет и используется двойные –

1

You ха ве заменить: holder.progressBar.setProgress(Integer.parseInt(total+""));

С:

holder.progressBar.setProgress(Math.round(total));

0

Значение total является либо double или float, метод setProgress() принимает int в качестве аргумента.

Таким образом, вы можете сделать следующее, изменить тип total к int,

Или используйте:

setProgress(Math.round(total)); 

Math.round функция может быть использована с double или float, он будет воспроизводить int, если вы передадите ему float или long, если вы передадите double. Выход будет возвращать значение, которое будет округлять вход до ближайшего десятичного знака.

Смежные вопросы