原來我們用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位置開始的itemCount個數的item是新加來的,后面的位置position要相應的更新。
比如我在位置2的地方添加一條數據,原來位置2的地方的的數據現在的position應該是3了,如果不加這句話,則點擊3的時候,還是提示position為2。
這個應該是google的一個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位置的那條數據刪掉,看效果
這個地方還是要notifyItemRangeChanged的,不然position也不會變的。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答