0
RecyclerViewは、いくつかのtextViewsと水平proggress barを持つCardViewから適応します。すべてのテキストニュースは計画どおりに機能していますが、プログレスバーは意図したとおりに動いていません。最後のprogressBarを最後のCardviewの作品で使用しますが、それは計画通りに動作しません。助けてください。プログレスバーは、あなたがにholder.budgetProgressBarを渡す必要がCardViewの進捗バーがRecycler Viewで機能しない
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
CategoriesModel categoriesModel = catList.get(position);
b_val =budgetAmountList.get(position);
e_val =expenseAmountList.get(position);
holder.cat.setText(categoriesModel.getCat_name());
holder.cat_pic.setColorFilter(Color.RED);
//chaning the colors of the catgrory colors
ArrayList<Integer> colors = new ArrayList<Integer>();
colors.add(Color.CYAN);
colors.add(Color.BLUE);
colors.add(Color.RED);
colors.add(Color.YELLOW);
colors.add(Color.GREEN);
colors.add(Color.LTGRAY);
colors.add(Color.BLACK);
colors.add(Color.MAGENTA);
colors.add(Color.TRANSPARENT);
colors.add(Color.GRAY);
colors.add(Color.CYAN);
colors.add(Color.LTGRAY);
colors.add(Color.DKGRAY);
colors.add(Color.LTGRAY);
holder.cat_pic.setColorFilter(colors.get(position));
//Setting BUdget Values After Formatting it
DecimalFormat formatter = new DecimalFormat("#,###.00");
String formatted_budget_amount= formatter.format(b_val);
holder.tvTotalBudgetAmountPerCategory.setText(formatted_budget_amount+"");
//Setting Expense Values After Formatting it
String formatted_expense_amount= formatter.format(e_val);
holder.tvTotalAmountSpentPerCategory.setText(formatted_expense_amount+"");
double remainder = b_val - e_val;
String formatted_remainder_amount= formatter.format(remainder);
holder.tvRemainingAmountPerCategory.setText(formatted_remainder_amount+"");
//Getting Currnecy From CUrrency Table.
String Currency = currencyManager.getCurrency();
holder.tvCurrencyGoale.setText(Currency);
holder.tvCurrencyAmountSpent.setText(Currency);
holder.tvCurrencyRemainder.setText(Currency);
//Setting Tag
holder.budgetProgressBar.setTag(position);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new BudgetCardAdapter.myTask(b_val, e_val, holder.budgetProgressBar).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
new BudgetCardAdapter.myTask(b_val, e_val,holder.budgetProgressBar).execute();
}
@Override
public int getItemCount() {
return catList.size();
}
public interface OnItemClickedListener {
void onItemClicked(int pos, CategoriesModel model);
}
非同期タスクOnBindViewHolder非同期タスククラスを使用してクラス
class myTask extends AsyncTask<Void, Integer, String> {
private final ProgressBar budgetProgressBar;
double b_val,e_val;
int position;
public myTask(double b_val ,double e_val,ProgressBar budgetProgressBar) {
this.b_val = b_val;
this.e_val = e_val;
this.budgetProgressBar= budgetProgressBar;
position = (int) budgetProgressBar.getTag();
}
int pStatus = (int) e_val;
int maxBudget = (int) b_val;
@Override
protected void onPreExecute() {
budgetProgressBar.setMax(maxBudget);
budgetProgressBar.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(Void... params) {
int incrementor =10;
for (int i = incrementor; i<=pStatus; i+=incrementor){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i);
}
return "Complete";
}
@Override
protected void onProgressUpdate(Integer... p) {
super.onProgressUpdate(p);
if ((int) budgetProgressBar.getTag() == position){
budgetProgressBar.incrementProgressBy(p[0]);
budgetProgressBar.setProgress(p[0]);
}
}
}
}
で
以下のようasynctask
変更コンストラクタを呼び出す前に、タグ(位置)を設定。ありがとうございました –
pls check updated答え –
iveがコードを更新しました。私はすべての変更を加え、getTag asnd setTagを追加しました。また、ViewHolderクラスも追加しました。それでもまだ動作していません。 –