代码之家  ›  专栏  ›  技术社区  ›  Darksymphony

onClick()移除列表项并刷新

  •  0
  • Darksymphony  · 技术社区  · 7 年前

    我有一个 ListView, 每个项目都可以点击。但是在每一个项目中我都有另一个可点击的按钮-它应该可以一次点击就删除当前项目。

    问题是,列表是从 JSON格式 在我的 Visited.java 上课。

    我试过这个:

    单击按钮是在适配器中管理的。

    @NonNull
    @Override
    public View getView(final int position, View convertView, @NonNull final ViewGroup parent) {
        View v = convertView;
        final ViewHolder holder;
        if (v == null) {
            holder = new ViewHolder();
            v = vi.inflate(Resource, null);
            holder.tvNazov = v.findViewById(R.id.tvNazov);
            holder.thumb = v.findViewById(R.id.ivImage);
            holder.tvTyp = v.findViewById(R.id.tvTyp);
            holder.tvPlace = v.findViewById(R.id.tvPlace);
            holder.tvPerex = v.findViewById(R.id.tvPerex);
            holder.tvLetter = v.findViewById(R.id.item_row_letter);
            holder.img1 = v.findViewById(R.id.imag1);
            holder.visiticon = v.findViewById(R.id.visiticon);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
    
       holder.thumb.setImageResource(R.drawable.ic_launcher_foreground);
       holder.tvNazov.setText(actorList.get(position).getNazov());
    
        final DatabaseHelper myDb;
        myDb = new DatabaseHelper(context);
    
        if(myDb.CheckDB(actorList.get(position).getExterier())) {
            holder.visiticon.setImageResource(R.drawable.visited2);
        } else {
            holder.visiticon.setImageResource(R.drawable.notvisited);
        }
    
        final View finalV = v;
        holder.visiticon
                .setOnClickListener(new View.OnClickListener() {
    
                    public void onClick(View arg0) {
                        MediaPlayer mp = MediaPlayer.create(context,R.raw.click);
                        mp.start();
                       // holder.visiticon.playSoundEffect(SoundEffectConstants.CLICK);
    
                        myDb.ToggleVisit(actorList.get(position).getExterier());
                        if(myDb.CheckDB(actorList.get(position).getExterier())) {
                            holder.visiticon.setImageResource(R.drawable.visited2);
                        } else {
                            holder.visiticon.setImageResource(R.drawable.notvisited);
                            finalV.setVisibility(View.GONE);
                            notifyDataSetChanged();
                        }
    
    
                    }
                });
    
       String pismeno = actorList.get(position).getLetter();
    
        if(pismeno.equalsIgnoreCase("x")) {holder.tvLetter.setVisibility(View.GONE);} else {holder.tvLetter.setVisibility(View.VISIBLE);holder.tvLetter.setText(pismeno);}
    
        Picasso.with(context).load(actorList.get(position).getThumb()).memoryPolicy(MemoryPolicy.NO_CACHE).networkPolicy(NetworkPolicy.NO_CACHE).into(holder.thumb);
        holder.tvTyp.setText(actorList.get(position).getTyp());
        holder.tvPlace.setText(actorList.get(position).getPlace());
        holder.tvPerex.setText(actorList.get(position).getPerex());
    
        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                Intent intent = new Intent(view.getContext(), SingleitemView.class);
    
                intent.putExtra("name", actorList.get(position).getNazov());
                intent.putExtra("adresar", actorList.get(position).getExterier());
    
                view.getContext().startActivity(intent);
            }
        });
    
    
    
    
    
        return v;
    }
    

    现在,当前的项目是隐藏的onclick-这是正常的工作,但是,一个空白的空间仍然存在,我需要刷新整个列表。

    使用 notifyDataSetChanged(); 在适配器中只是刷新列表,但空项仍然存在。因为我想我需要打电话给 访问.java 再次初始化,或者不确定如何删除整个项,而不仅仅是从列表中删除它的内容。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Faldu Jaldeep    7 年前

    请尝试添加单击侦听器以删除如下项。

    //Your click listener to delete item and refresh
            v.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // If you want to delete item from DB then you need to call delete query here
                    actorList.remove(position);
                    notifyDataSetChanged();
                }
            });