RecyclerView 삽입 및 삭제 실현

원래 우리 가 listview 를 사용 할 때 데 이 터 를 삽입 한 후에 adapter 의 notifydatasetchanged 를 통 해 OK 되 었 습 니 다.그리고 recycleview 가 listview 보다 더 좋 은 곳 은 바로 그것 이 더욱 유연 하고 통제 성 이 강하 다 는 것 이다.우 리 는 하고 싶 은 대로 만 지 는 것 이다.이 책 은 주로 RecyclerView 의 세 가지 방법 을 다 루 고 있다.
1、notifyItemInserted(int position)
2、notifyItemRangeChanged(int positionStart, int itemCount)
3、notifyItemRemoved(int position)
1、notifyItemInserted(int position)
위치 position 에 하 나 를 삽입 한 다 는 뜻 이다.
코드 보기

public class TestActivity extends AppCompatActivity {


  @Bind(R.id.button_add)
  Button buttonAdd;
  @Bind(R.id.recycler)
  RecyclerView recycler;

  private MyAdapter mAdapter;
  private List<String> mList = new ArrayList<>();
  private int count = 0;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit_text);
    ButterKnife.bind(this);

    initData();

    recycler.setLayoutManager(new LinearLayoutManager(this));

    mAdapter = new MyAdapter(this,mList);
    recycler.setAdapter(mAdapter);
  }

  private void initData() {

    for(int i=0;i<15;i++){
      mList.add(i+"");
    }
  }

  @OnClick(R.id.button_add)
  public void add(){
    count++;
    mList.add(2,"  "+count);
    mAdapter.notifyItemInserted(2);
    mAdapter.notifyItemRangeChanged(2,mList.size()-2);
  }
}
这里写图片描述
코드 를 보면 알 수 있 듯 이 나 는 position=2 의 위치 에 데 이 터 를 삽입 했다.결 과 는 곧 삽입 되 었 고 전체 목록 을 업데이트 할 필요 가 없다.
2.하지만 제 코드 에 또 한 마디 가 있 습 니 다.

mAdapter.notifyItemRangeChanged(2,mList.size()-2)
이 말 이 무슨 뜻 이 죠?position 이 2 위치 에서 시 작 된 item Count 개수 의 item 은 새로 추 가 된 것 이 고 뒤의 위치 position 는 상응 하 게 업데이트 해 야 한 다 는 뜻 이다.
예 를 들 어 제 가 위치 2 에 데 이 터 를 추가 하 는데 원래 위치 2 의 데 이 터 는 현재 position 가 3 일 것 입 니 다.이 말 을 추가 하지 않 으 면 3 을 클릭 할 때 알림 position 가 2 입 니 다.
이것 은 구 글 의 bug 일 것 입 니 다.
3.notifyItemRemoved(int position),position 위치 에 있 는 항목 을 삭제 합 니 다.

@OnClick(R.id.button_delete)
  public void delete(){
    mList.remove(2);
    mAdapter.notifyItemRemoved(2);
    mAdapter.notifyItemRangeChanged(0,mList.size()-2);
  }
이 코드 는 position 가 2 위치 인 데 이 터 를 삭제 하고 효 과 를 보 자 는 뜻 입 니 다.
这里写图片描述
이곳 은 notify ItemRange Changed 해 야 합 니 다.그렇지 않 으 면 position 도 변 하지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기