Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 已从ArrayList中删除项,但notifyDataSetChanged()仅删除底部项_Java_Android_Arraylist_Android Recyclerview - Fatal编程技术网

Java 已从ArrayList中删除项,但notifyDataSetChanged()仅删除底部项

Java 已从ArrayList中删除项,但notifyDataSetChanged()仅删除底部项,java,android,arraylist,android-recyclerview,Java,Android,Arraylist,Android Recyclerview,我有一个recycler视图,其中包含来自自定义对象的ArrayList。 每行都有一个删除按钮,单击该按钮后,该项目将从recyclerview中删除。 现在“删除”按钮可以工作,并从arraylist中删除正确的项目,但是当项目再次显示在列表中时,仅删除底部的项目,而真正从列表中删除的项目仍保留在那里 这真的很奇怪,我不知道为什么 我管理活动中删除的项目,以下是活动的代码: public class ManageExerciseActivity extends AppCompatActivi

我有一个recycler视图,其中包含来自自定义对象的ArrayList。 每行都有一个删除按钮,单击该按钮后,该项目将从recyclerview中删除。 现在“删除”按钮可以工作,并从arraylist中删除正确的项目,但是当项目再次显示在列表中时,仅删除底部的项目,而真正从列表中删除的项目仍保留在那里

这真的很奇怪,我不知道为什么

我管理活动中删除的项目,以下是活动的代码:

public class ManageExerciseActivity extends AppCompatActivity {

private static final String TAG = "999.OffLimitsActivity";
private RecyclerView exerciseRecyclerView;
private ExerciseManageAdapter exerciseAdapter;
public ArrayList<Exercise> exerciseList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_manage_exercise);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(ManageExerciseActivity.this, AddExerciseActivity.class);
            startActivity(intent);
        }
    });


    fab.setImageBitmap(textAsBitmap("ADD", 40, Color.WHITE));


    exerciseList = new ArrayList<>();


        getSupportActionBar().setTitle("Manage my exercises");

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);


        exerciseRecyclerView = (RecyclerView) findViewById(R.id.exercise_manage_recycler_view);
        exerciseAdapter = new ExerciseManageAdapter(exerciseList);


        exerciseAdapter.setOnItemClickListener(new ExerciseManageAdapter.ClickListener() {

            @Override
            public void onItemClick(final int position, final View v) {
                Log.d(TAG, "onItemClick pos = " + position);

// custom dialog
                AlertDialog.Builder builder = new AlertDialog.Builder(ManageExerciseActivity.this);
                builder.setMessage("Do you wish to delete this exercise?")
                        .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                            String itemRemoved = exerciseList.get(position).getNameOfExercise();

                            exerciseList.remove(position);

                            exerciseAdapter.notifyDataSetChanged();



                            Snackbar.make(v, itemRemoved + " deleted", Snackbar.LENGTH_LONG)
                                    .setAction("Undo", null).show();




                        }
                    })
                    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // User cancelled the dialog
                        }
                    });
            // Create the AlertDialog object and return it
            builder.create();
            builder.show();

        }
    });


    exerciseRecyclerView.setAdapter(exerciseAdapter);
    exerciseRecyclerView.setLayoutManager(new LinearLayoutManager(this));



}
公共类ManageExerciseActivity扩展了AppCompativeActivity{
私有静态最终字符串TAG=“999.OffLimitsActivity”;
私人回收视图;
私有ExerciseManageAdapter exerciseAdapter;
公共ArrayList练习表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u manage\u练习);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(ManageExerciseActivity.this,AddExerciseActivity.class);
星触觉(意向);
}
});
制作setImageBitmap(textAsBitmap(“添加”,40,颜色.白色));
exerciseList=新的ArrayList();
getSupportActionBar().setTitle(“管理我的练习”);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
exerciseRecyclerView=(RecyclerView)findViewById(R.id.exercise\u manage\u recycler\u view);
exerciseAdapter=新的ExerciseManageAdapter(exerciseList);
exerciseAdapter.setOnItemClickListener(新的ExerciseManageAdapter.ClickListener(){
@凌驾
公共视图(最终整型位置,最终视图v){
Log.d(标签“onItemClick pos=“+位置”);
//自定义对话框
AlertDialog.Builder=新建AlertDialog.Builder(ManageExerciseActivity.this);
setMessage(“是否要删除此练习?”)
.setPositiveButton(R.string.yes,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
String itemRemoved=exerciseList.get(position).getNameOfExercise();
练习表。移除(位置);
exerciseAdapter.notifyDataSetChanged();
Snackbar.make(v,itemRemoved+“deleted”,Snackbar.LENGTH\u LONG)
.setAction(“撤消”,null).show();
}
})
.setNegativeButton(R.string.cancel,新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
//用户取消了该对话框
}
});
//创建AlertDialog对象并返回它
builder.create();
builder.show();
}
});
exerciseRecyclerView.setAdapter(exerciseAdapter);
exerciseRecyclerView.setLayoutManager(新的LinearLayoutManager(此));
}
这是适配器:

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


    private static ClickListener clickListener;

    public ImageView exerciseItemIcon;
    public TextView exerciseNameTextView;
    public TextView exerciseDurationTextView;
    public TextView exerciseTimesRemainingTextView;
    public ImageView deleteImageView;

    ArrayList<Exercise> exerciseArrayList = new ArrayList<>();

    public ExerciseManageAdapter(ArrayList<Exercise> exerciseArrayList) {

        this.exerciseArrayList = exerciseArrayList;

    }


    public interface ClickListener {
        void onItemClick(int position, View v);
    }


    class ExerciseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        public ExerciseViewHolder(View view) {
            super(view);

//            view.setOnClickListener(this);

            exerciseNameTextView = (TextView)view.findViewById(R.id.exercise_manage_name_textView);
            exerciseDurationTextView = (TextView)view.findViewById(R.id.exercise_manage_duration_textview);
            exerciseTimesRemainingTextView = (TextView)view.findViewById(R.id.exercise_manage_times_remaining);
            exerciseItemIcon = (ImageView)view.findViewById(R.id.exercise_manage_item_icon);
            deleteImageView = (ImageView)view.findViewById(R.id.delete_exercise_button);

            deleteImageView.setOnClickListener(this);
        }




        @Override
        public void onClick(View v) {
            clickListener.onItemClick(getAdapterPosition(), v);
        }


    }

    public void setOnItemClickListener(ClickListener clickListener) {
        ExerciseManageAdapter.clickListener = clickListener;
    }

        @Override
        public int getItemViewType(int position) {

            return position;
        }

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

    @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {



            View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.exercise_manage_item_row, parent, false);



            return new ExerciseViewHolder(itemView);

        }




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


            ExerciseViewHolder exerciseViewHolder = (ExerciseViewHolder) holder;
            exerciseNameTextView.setText(exerciseArrayList.get(position).getNameOfExercise());
            exerciseDurationTextView.setText(exerciseArrayList.get(position).getDurationOfExercise());
            exerciseTimesRemainingTextView.setText(exerciseArrayList.get(position).getTimesPerWeek() + " times a week");
            exerciseItemIcon.setImageResource(exerciseArrayList.get(position).getExerciseIcon());


            }
        }
public类ExerciseManageAdapter扩展了RecyclerView.Adapter{
私有静态ClickListener ClickListener;
公共图像视图项目图标;
公共文本视图exerciseNameTextView;
公共文本视图exerciseDurationTextView;
公共文本视图exerciseTimesRemainingTextView;
公共图像视图删除图像视图;
ArrayList exerciseArrayList=新建ArrayList();
公共ExerciseManageAdapter(ArrayList exerciseArrayList){
this.exerciseArrayList=exerciseArrayList;
}
公共界面ClickListener{
虚线单击(内部位置,视图v);
}
类ExerciseViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
public ExerciseViewHolder(视图){
超级(视图);
//view.setOnClickListener(这个);
exerciseNameTextView=(TextView)view.findViewById(R.id.exercise\u manage\u name\u TextView);
exerciseDurationTextView=(TextView)view.findViewById(R.id.exercise\u manage\u duration\u TextView);
exerciseTimesRemainingTextView=(TextView)view.findViewById(R.id.exercise\u manage\u times\u remaining);
exerciseItemIcon=(ImageView)view.findViewById(R.id.exercise\u manage\u item\u icon);
deleteImageView=(ImageView)view.findViewById(R.id.delete_练习_按钮);
deleteImageView.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
单击listener.onItemClick(getAdapterPosition(),v);
}
}
public void setOnItemClickListener(ClickListener ClickListener){
ExerciseManageAdapter.clickListener=clickListener;
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
@凌驾
public int getItemCount(){
return exerciseArrayList.size();
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.exercise\u manage\u item\u row,parent,false);
返回新的ExerciseViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终RecyclerView.ViewHolder,最终整型位置){
ExerciseViewHolder ExerciseViewHolder=(ExerciseViewHolder)holder;
exerciseNameTextView.setText(exerciseArrayList.get(position).getNameOfExercis
notifyItemRemoved(position);
notifyItemRangeChanged(position, mData.size());