0
我的RecyclerView使用一些文本視圖和一個水平編目欄從CardView進行調整。所有textvIews都按計劃運行,但進度條並未按預期移動。 BU最後一個Cardview中的最後一個progressBar工作正常,但那還沒有按計劃進行。請幫忙。該進度條使用異步任務類實現CardViews中的進度條無法在Recycler視圖中使用
ViewHolder類
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView cat,tvTotalBudgetAmountPerCategory,tvCurrencyGoale,tvCurrencyAmountSpent,
tvCurrencyPredicted,tvCurrencyRemainder, tvTotalAmountSpentPerCategory,tvRemainingAmountPerCategory ;
public ImageView cat_pic;
public ProgressBar budgetProgressBar;
public MyViewHolder(View view) {
super(view);
//pic = (ImageView) view.findViewById(R.id.pic);
cat = (TextView) view.findViewById(R.id.cat_title);
//Refercing ImageViews for circular shape
cat_pic = (ImageView) view.findViewById(R.id.cat_pic);
//Referencing Currency textViews
tvCurrencyGoale = (TextView) view.findViewById(R.id.tvCurrencyGoale);
tvCurrencyAmountSpent = (TextView) view.findViewById(R.id.tvCurrencyAmountSpent);
// tvCurrencyPredicted = (TextView) view.findViewById(R.id.tvCurrencyPredicted);
tvCurrencyRemainder = (TextView) view.findViewById(R.id.tvCurrencyRemainder);
//TextViews For Budget, Amount & Reaminder textviews
tvTotalBudgetAmountPerCategory = (TextView) view.findViewById(R.id.tvTotalBudgetAmountPerCategory);
tvTotalAmountSpentPerCategory = (TextView) view.findViewById(R.id.tvTotalAmountSpentPerCategory);
tvRemainingAmountPerCategory = (TextView) view.findViewById(R.id.tvRemainingAmountPerCategory);
//Referencing ProgressBar
budgetProgressBar = (ProgressBar) view.findViewById(R.id.budgetProgressBar1);
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
notifyItemClicked(getAdapterPosition());
}
}
private void notifyItemClicked(int adapterPosition) {
if (listener != null) {
listener.onItemClicked(adapterPosition, catList.get(adapterPosition));
}
}
public BudgetCardAdapter(List<CategoriesModel> catList, List<Double> budgetAmountList, List<Double> expenseAmountList) {
this.catList = catList;
this.budgetAmountList =budgetAmountList;
this.expenseAmountList =expenseAmountList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.budget_card_list, parent, false);
currencyManager = new CurrencyManager(parent.getContext());
return new MyViewHolder(itemView);
}
OnBindViewHolder
@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);
}
異步任務
類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]);
}
}
}
}
請一些代碼幫助之前設置一個標籤(位置) 。謝謝 –
請檢查更新的答案 –
ive更新了代碼,我做了所有更改並添加了getTag asnd setTag。我也添加了ViewHolder類。它仍然無法正常工作。 –