![](/img/trans.png)
[英]Android change textview in recyclerview in all items without redrawing the entire list
[英]android list items simple TextView change to initial state after scrolling
我正在制作一個由食品清單組成的餐廳應用程序,用戶可以在其中添加或減去食品編號。 我的問題是,每當單擊添加按鈕時,它都會增加該食品的價值,但向下或向上滾動列表后。 其值將更改為其初始狀態。 我已經在Stackoverflow和許多其他網站上搜索了與此相關的所有問題,但沒有任何幫助。 我已經嘗試過ViewHolder,setfocuschangelistener等,我知道問題是由android回收的東西,任何人都可以告訴我該怎么做才能解決我的問題
這是我的自定義適配器類:
public class CustomAdapter extends ArrayAdapter<String> {
String costing;
ImageView add;
int totalCost;
loggedIn loggedIn;
public CustomAdapter(Context context, String[] foods) {
super(context,R.layout.custom_row ,foods);
}
static class ViewHolder{
TextView foodItem;
TextView noOfFoodItem;
ImageView minus;
ImageView add;
TextView cost;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
if(convertView==null) {
convertView = layoutInflater.inflate(R.layout.custom_row, parent, false);
holder = new ViewHolder();
holder.foodItem = (TextView) convertView.findViewById(R.id.foodItem);
holder.cost = (TextView) convertView.findViewById(R.id.cost);
holder.minus = (ImageView) convertView.findViewById(R.id.minus);
holder.noOfFoodItem = (TextView) convertView.findViewById(R.id.noOfFoodItem);
holder.add = (ImageView) convertView.findViewById(R.id.add);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
try{
String[] foodItems = {"Burger ","Pizza ","Cold Drinks ",
"Coffee ","Burger ","Pizza ",
"Cold Drinks ","Coffee ","Burger ",
"Pizza ","Cold Drinks ","Coffee ","Burger ",
"Pizza ",
"Cold Drinks ","Coffee "};
holder.foodItem.setText(foodItems[position]);
String[] costs = {"Rs.70","Rs.80","Rs.70","Rs.80","Rs.70","Rs.80","Rs.70","Rs.80","Rs.70","Rs.80","Rs.70","Rs.80"};
holder.cost.setText(costs[position]);
holder.minus.setImageResource(R.drawable.minus);
holder.noOfFoodItem.setText("0");
holder.add.setImageResource(R.drawable.add);
}catch (Exception e){
e.printStackTrace();
}
holder.add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Getting items selected of any food item
if(holder.noOfFoodItem.getText().toString().equals("9")){
Toast.makeText(getContext(),"Maximum limit reached!",Toast.LENGTH_SHORT).show();
holder.noOfFoodItem.setText("9");
}else
holder.noOfFoodItem.setText(String.valueOf(Integer.parseInt(holder.noOfFoodItem.getText().toString())+1));
}
});
holder.minus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holder.noOfFoodItem.getText().toString().equals("0")){
Toast.makeText(getContext(),"Do you need some medical attention?",Toast.LENGTH_SHORT).show();
holder.noOfFoodItem.setText("0");
}else{
holder.noOfFoodItem.setText(String.valueOf(Integer.parseInt(holder.noOfFoodItem.getText().toString())-1));
}
}
});
return convertView;
}
}
您需要保持列表中每個項目的價值不被回收。 您可以通過使用HashMap並將noOfFoodCount放在hasmap中(位置作為鍵,食物計數作為值)來實現。
您只是在當前文本中添加或減去該值。您必須創建一個數組列表來保存這些計數。
創建一個類似ArrayList<Integer> count=new ArrayList<Integer>;
的arraylist ArrayList<Integer> count=new ArrayList<Integer>;
然后在添加時
holder.add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Getting items selected of any food item
if(holder.noOfFoodItem.getText().toString().equals("9")){
Toast.makeText(getContext(),"Maximum limit reached!",Toast.LENGTH_SHORT).show();
holder.noOfFoodItem.setText("9");
count.add(9);
}else {
holder.noOfFoodItem.setText(String.valueOf(Integer.parseInt(holder.noOfFoodItem.getText().toString())+1));
count.add(Integer.parseInt(holder.noOfFoodItem.getText().toString())+1);
}
}
});
在減少計數的情況下,
holder.minus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holder.noOfFoodItem.getText().toString().equals("0")){
Toast.makeText(getContext(),"Do you need some medical attention?",Toast.LENGTH_SHORT).show();
holder.noOfFoodItem.setText("0");
count.add(0);
}else{
holder.noOfFoodItem.setText(String.valueOf(Integer.parseInt(holder.noOfFoodItem.getText().toString())-1));
count.add(Integer.parseInt(holder.noOfFoodItem.getText().toString())-1);
}
}
});
希望你能理解。
添加一個全局變量
List<String> foodItems;
將您的構造函數更改為
public CustomAdapter(Context context, String[] foods) {
super(context,R.layout.custom_row ,foods);
foodItems=Arrays.asList(foods);
}
並將您的添加按鈕onClickListerner修改為
else{
foodItems.add("add your item name here");
holder.noOfFoodItem.setText(foodItems.size());
}
讓我知道你是否需要澄清
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.