【问题标题】:How to delete or remove CardView from RecyclerView? Android Studio如何从 RecyclerView 中删除或移除 CardView?安卓工作室
【发布时间】:2019-02-23 12:54:20
【问题描述】:

在我的 RecyclerView 上是包含有关某个练习的详细信息的 CardView,在我的 CardView 上,旁边有一个 ImageDeleteBtn。如何从 RecyclerView 和 Firebase 中删除 CardView?

这是我的适配器

package com.lim.fiture.fiture.adapters;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageButton;

import com.lim.fiture.fiture.R;
import com.lim.fiture.fiture.models.Exercise;

import java.util.ArrayList;

public class AdminActivityAdapter extends RecyclerView.Adapter <AdminActivityAdapter.ViewHolder>{

    Context context;
    public ArrayList <Exercise> exercises;
    private OnItemClicked onClick;

    //make interface like this
    public interface OnItemClicked {
        void onItemClick(int position);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_admin_adapter,parent,false);
        AdminActivityAdapter.ViewHolder viewHolder = new AdminActivityAdapter.ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        holder.exerciseName.setText(exercises.get(position).getExerciseName());
        holder.mainMuscleGroup.setText(exercises.get(position).getMainMuscleGroup());
        holder.otherMuscleGroup.setText(exercises.get(position).getOtherMuscleGroup());
        holder.type.setText(exercises.get(position).getType());
        holder.equipment.setText(exercises.get(position).getEquipment());
        holder.difficulty.setText(exercises.get(position).getDifficulty());
        holder.deleteExercise.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClick.onItemClick(position);
            }
        });

    }

    @Override
    public int getItemCount() {
        return exercises.size();
    }


    public class ViewHolder extends RecyclerView.ViewHolder {
        private EditText exerciseName, mainMuscleGroup, otherMuscleGroup, type, equipment, difficulty;
        private ImageButton deleteExercise;
        public ViewHolder(View itemView) {
            super(itemView);

            exerciseName = itemView.findViewById(R.id.exerciseName);
            mainMuscleGroup = itemView.findViewById(R.id.mainMuscleGroup);
            otherMuscleGroup = itemView.findViewById(R.id.otherMuscleGroup);
            type = itemView.findViewById(R.id.type);
            equipment = itemView.findViewById(R.id.equipment);
            difficulty = itemView.findViewById(R.id.difficulty);
            deleteExercise = itemView.findViewById(R.id.deleteBtn);

        }
    }
}

这是我的活动

package com.lim.fiture.fiture.activities;

import android.content.ClipData;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageButton;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.lim.fiture.fiture.R;
import com.lim.fiture.fiture.adapters.AdminActivityAdapter;
import com.lim.fiture.fiture.adapters.ExercisesAdapter;
import com.lim.fiture.fiture.models.Exercise;

import java.util.ArrayList;



public class AdminActivity extends AppCompatActivity implements View.OnClickListener, AdminActivityAdapter.OnItemClicked {

    private RecyclerView exercisesList;
    private AdminActivityAdapter adapter;
    private RecyclerView.LayoutManager layoutManager;
    private FloatingActionButton addExerciseBtn;
    private ExercisesAdapter exercisesAdapter;
    private ArrayList<Exercise> exercises = new ArrayList<>();

    //TODO: instance variables for firebase database
    private DatabaseReference exerciseReference;
    private static final String TAG = "AdminActivity";
    private FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin);

        mAuth = FirebaseAuth.getInstance();
        exerciseReference = FirebaseDatabase.getInstance().getReference("Exercises");
        findViews();
        loadExercises();
    }

    @Override
    protected void onStart() {
        super.onStart();
        FirebaseUser user = mAuth.getCurrentUser();
        if (user != null) {
            // do your stuff
        } else {
            signInAnonymously();
        }
    }

    private void signInAnonymously() {
        mAuth.signInAnonymously().addOnSuccessListener(this, new OnSuccessListener<AuthResult>() {
            @Override
            public void onSuccess(AuthResult authResult) {
                // do your stuff
            }
        })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    Log.e(TAG, "signInAnonymously:FAILURE", exception);
                }
            });
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.addExerciseBtn:
                startActivity(new Intent(this, AddExerciseStepOne.class));
                break;
        }
    }

    public void findViews() {
        addExerciseBtn = findViewById(R.id.addExerciseBtn);
        addExerciseBtn.setOnClickListener(this);
        exercisesList = findViewById(R.id.exercisesList);
        layoutManager = new LinearLayoutManager(this);
        exercisesList.setLayoutManager(layoutManager);

        ActionBar bar = getSupportActionBar();
        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#2980b9")));
        bar.setTitle("Fiture Admin");
    }

    public void loadExercises() {
        exerciseReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Exercise exercise = dataSnapshot.getValue(Exercise.class);
                Log.d(TAG, exercise.toString());
                exercises.add(exercise);
                exercisesAdapter = new ExercisesAdapter(AdminActivity.this, exercises);
                exercisesList.setAdapter(exercisesAdapter);

            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }

        });
    }

    @Override
    public void onItemClick(int position) {

    }
}

有人知道怎么做吗?这对我来说将是一个非常大的帮助。先谢谢了!

【问题讨论】:

  • 分享你的模型练习课
  • 请也分享适配器ExercisesAdapter

标签: android firebase firebase-realtime-database android-recyclerview cardview


【解决方案1】:

解决方案:

在你的onBindView(..) 里面这样写:

holder.deleteExercise.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        exercises.remove(holder.getAdapterPosition());
        notifyItemRemoved(holder.getAdapterPosition());
        notifyItemRangeChanged(holder.getAdapterPosition(), exercises.size());
    }
});

希望对你有帮助。

【讨论】:

  • 什么也没发生。我还应该在我的 Activity 中的 onItemClick 上添加一些东西吗?
  • 您不需要 onItemClick。只是这些行很好。
  • 添加 Toast 并查看您的按钮是否正常工作。然后检查此代码。
【解决方案2】:

在您的 onBind 中执行此操作。

holder.deleteExercise.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        exercises.remove(position);
        notifyDataSetChanged()
    }
});

【讨论】:

  • 生病更新这个并添加我的 xml 文件。你能再检查一下吗?
【解决方案3】:

试试这个,和标签一起使用:

holder.deleteExercise.setTag(position);
holder.deleteExercise.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {       
        exercises.remove((int)v.getTag());
        notifyDataSetChanged()
    }
});

【讨论】:

    【解决方案4】:

    试试这个,希望对你有帮助。

    holder.deleteExercise.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            exercises.remove(exercises.get(position));
            notifyDataSetChanged()
        }
    });
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    【解决方案5】:

    尝试以下解决方案:

    @Override
    public void onItemClick(int position) {
        exercises.removeAt(postion)
        yourList.adapter.notifyItemRangeChanged(deletedPosition, yourList.size )
    }
    

    希望这个解决方案能奏效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 2021-11-22
      • 2018-01-29
      • 2013-07-08
      • 2017-04-17
      • 2014-04-30
      • 1970-01-01
      相关资源
      最近更新 更多