簡體   English   中英

android列表項簡單TextView滾動后更改為初始狀態

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM