Мой RecyclerView отстает, несмотря на отсутствие каких-либо слушателей + изображений, почему это?

Во-первых, я читал другие сообщения, которые имеют ту же проблему, что и я; из того, что я суммировал, проблема, как правило, из-за imageviews/pictures + listeners. Но это не мой случай. У меня даже нет слушателей, созданных для моего delButtonиaddButton, и я все еще отстаю.

Что я намерен делать:
https://gyazo.com/ff984e87fc11543d44d1b549147f870c

При нажатии кнопки Добавить будет создан новый список

Это мой класс RecyclerVIew:

public class RecyclerAdapter extends RecyclerView.Adapter {

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

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ((ViewHolder) holder).bindView(position);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView mListTextView;

        public ViewHolder(View itemView) {
            super(itemView);
            mListTextView = (TextView) itemView.findViewById(R.id.currentLIst);
        }

        public void bindView(int position){
            mListTextView.setText("List # " + position);
        }
    }

}

Это мой класс Acvitiy

    public class SavedLists extends AppCompatActivity {
       // private yourListNumber[] mHoles = new yourListNumber[0];
        public static final ArrayList<ListRow> mListRow  = new ArrayList<ListRow>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_saved_lists);
            Button mButton = (Button) findViewById(R.id.addList);



            //RECYCLERADAPTER set-up here:
            final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
            final RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(layoutManager);
            recyclerView.setAdapter(new RecyclerAdapter());

            mButton.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
                    mListRow.add(new ListRow());

                    recyclerView.setLayoutManager(layoutManager);
                    recyclerView.setAdapter(new RecyclerAdapter());
                    //instead of repeating these 3 lines of code, you can use refresh
                }
            });
        }
    }

2 ответа

  1. Это потому, что вы всегда сбрасываете адаптер recyclerView всякий раз, когда кнопка нажата.
    изменение прослушивателя onClick стать похожим на это

    mButton.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            mListRow.add(new ListRow());
    
            recyclerView.notifyDataSetChanged();
        }
    });
    
  2. Почему вы вызываете метод viewholders из bindViewolder ? Измените его на like this

    public class RecyclerAdapter extends RecyclerView.Adapter {
    ArrayList<ListRow> adapterListData;
    
     @Override
     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
       public void RecyclerAdapter(ArrayList<ListRow> mListRow){
        adapterListData = mListRow;
       }
    
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.saved_list_layout, parent, false);
        return new ViewHolder(view);
    }
    
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
          holder.mListTextView.setText("List # " + adapterListData.get(position));
    
    }
    
    @Override
    public int getItemCount() {
        return adapterListData.size();
    }
    
    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView mListTextView;
    
        public ViewHolder(View itemView) {
            super(itemView);
            mListTextView = (TextView) itemView.findViewById(R.id.currentLIst);
        }
    }
    

    }

    И не установите переходнику recycler дважды в деятельности. И передайте ваши данные в конструкторе и назначьте его к глобальному varaible

    public class SavedLists extends AppCompatActivity {
       // private yourListNumber[] mHoles = new yourListNumber[0];
        public static final ArrayList<ListRow> mListRow  = new ArrayList<ListRow>();
         RecyclerAdapter mAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_saved_lists);
            Button mButton = (Button) findViewById(R.id.addList);
    
    
    
            //RECYCLERADAPTER set-up here:
            final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
            final RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(layoutManager);
            mAdapter  = new RecyclerAdapter(mListRow);
            recyclerView.setAdapter(mAdapter);
    
            mButton.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
                    mListRow.add(new ListRow());
                    mAdapter.notifyDataSetChanged();
                }
            });
        }
    }