在我的 android 应用程序中滚动列表视图时,数据正在消失。我在片段中使用列表视图

Posted

技术标签:

【中文标题】在我的 android 应用程序中滚动列表视图时,数据正在消失。我在片段中使用列表视图【英文标题】:While Scrolling the listview in my android app the data is disappearing.I am using the listview inside a Fragment 【发布时间】:2019-12-02 10:25:52 【问题描述】:

我正在使用 listview 内的 fragment bottomnavigation。每当listview 行超出屏幕时,它的值就会重置。

我尝试在我的代码中实现Recyclerview.Viewholder,但它显示了一些错误,我不知道如何在我的代码中实现viewholder

public class AtcAdapter  extends ArrayAdapter<AtcObjects> 
    public AtcAdapter(@NonNull Context context, int resource, List<AtcObjects> objects) 
        super(context, resource, objects);


@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull final ViewGroup parent) 
    View ListItemView=convertView;

    if(ListItemView==null) 
        ListItemView = LayoutInflater.from(getContext()).inflate(R.layout.atc_list, parent, false);

        
    AtcObjects currentFood = getItem(position);

    TextView foodName=(TextView) ListItemView.findViewById(R.id.atcFname);
    foodName.setText(currentFood.getpName());
    TextView fPrice=(TextView) ListItemView.findViewById(R.id.atcFprice);
    fPrice.setText("Price   :"+currentFood.getpPrice()+" RS");
    TextView tvRes=(TextView) ListItemView.findViewById(R.id.tvResName);
    tvRes.setText(""+currentFood.getResName()+" ResName");
    String url=currentFood.getpIng();
    ImageView imgV=(ImageView) ListItemView.findViewById(R.id.ivAtc);
    Picasso.get().load(url).into(imgV);
    final TextView textView=(TextView) ListItemView.findViewById(R.id.atcQty);
    textView.setText(currentFood.qty+"");
    Button addBtn=(Button) ListItemView.findViewById(R.id.atc_addBtn);
  Button btnRemove=(Button) ListItemView.findViewById(R.id.atc_delete);
    btnRemove.setOnClickListener(new View.OnClickListener() 
                                     @Override
                                     public void onClick(View view) 
                                         ((ListView) parent).performItemClick(view, position, 66);
                                     
                                 );
           addBtn.setTag(position);
    addBtn.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
           updateQuantity(position,textView,1);
            ((ListView) parent).performItemClick(view, position, 56);

        
    );
    Button subbtn=(Button) ListItemView.findViewById(R.id.atc_subBtn);
    subbtn.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
         updateQuantity(position,textView,-1);
            ((ListView) parent).performItemClick(view, position, 90);

        
    );
    return ListItemView;



private void updateQuantity(int position, TextView edTextQuantity, int value) 

   AtcObjects products = getItem(position);
    if(value > 0)
    
        products.qty = products.qty + 1;
    
    else
    
        if(products.qty > 0)
        
            products.qty = products.qty - 1;
        

    
    edTextQuantity.setText(products.qty+"");

@Override
public int getViewTypeCount() 

    return getCount();


@Override
public int getItemViewType(int position) 

    return position;

【问题讨论】:

好吧,如果你想使用 RecyclerView,那么考虑放弃 ArrayAdapter,改用 RecyclerView.Adapter。 不,我不想使用 RecyclerView 它有点复杂。 这……真的不是。只需遵循指南即可。 【参考方案1】:
        You can create ViewHolder class as below:
         static class ViewHolder 
                ImageView imageView;
                TextView textView;
                int position;
            

        and inside getView() method use below code :-
        @Override
        public View getView(final int position, @Nullable View convertView, @NonNull final ViewGroup parent) 
         ViewHolder holder;

                if (convertView == null) 
                    convertView = mInflater.inflate(R.layout.view, null);
                    holder = new ViewHolder();
                    holder.textView= (TextView) convertView.findViewById(R.id.textView);
                    convertView.setTag(holder);
                
                else 
                    holder = (ViewHolder) convertView.getTag();
                

【讨论】:

以上是关于在我的 android 应用程序中滚动列表视图时,数据正在消失。我在片段中使用列表视图的主要内容,如果未能解决你的问题,请参考以下文章

android中带有Endless Listview Scroll的AsynTask

列表视图滚动时隐藏搜索栏

当我在 Android 上滚动列表视图时复选框未选中

如何实现无限滚动列表视图

Android - 从 mysql 数据库中查看更多旧数据(不是图像),当在列表视图中滚动底部时

提高 Android ListView 中的滚动平滑度