RecyclerView
已经很久没有用ListView了,因为替代的东西用了1年了。
2.上拉刷新和下拉加载。 好了先把代码考好。public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private RecyclerViewAdapter recyclerViewAdapter; private LinearLayoutManager linearLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); init(); listener(); } public void init(){ recyclerViewAdapter=new RecyclerViewAdapter(); recyclerView=(RecyclerView)findViewById(R.id.recyclerView1); linearLayoutManager=new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setAdapter(recyclerViewAdapter); } public void listener(){ recyclerViewAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void setOnClickView(View view, final int position) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this,String.valueOf(position),Toast.LENGTH_SHORT).show(); } }); } }); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } @Override public void onScrolled(final RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); Log.i("Tag","tag"+recyclerViewAdapter.getPosition()); int lastVisibleItem=linearLayoutManager.findLastVisibleItemPosition(); Log.i("Tag","tag,,,,,,,lastVisibleItem"+lastVisibleItem); if(lastVisibleItem==recyclerViewAdapter.getItemCount()-1&&dy>0){ recyclerViewAdapter.notifyItemInserted(recyclerViewAdapter.getItemCount()); handler.postDelayed(new Runnable() { @Override public void run() { recyclerViewAdapter.notifyItemRemoved(recyclerViewAdapter.getItemCount()); } },1000); }; } }); } Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; public interface OnItemClickListener{ public void setOnClickView(View view,int position); } class RecyclerViewAdapter extends RecyclerView.Adapter implements View.OnClickListener{ private int position; private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener=onItemClickListener; } public int getPosition() { return position; } public void setPosition(int position) { this.position = position; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Log.i("Tag","tag"+viewType); if(viewType==1){ View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.recyclerview_item1,parent,false); ViewHoldR viewHolds=new ViewHoldR(view); return viewHolds; }else { View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.recyclerview_item,parent,false); ViewHolds viewHolds=new ViewHolds(view); viewHolds.itemView.setOnClickListener(this); return viewHolds; } } @Override public int getItemViewType(int position) { if(position+1==this.getItemCount()){ return 1; }else { return 0; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(position+1!=this.getItemCount()){ ((ViewHolds)holder).itemView.setTag(position); ((ViewHolds)holder).textView.setText(String.valueOf(position)); } this.setPosition(position); } @Override public int getItemCount() { return 20; } @Override public long getItemId(int position) { return super.getItemId(position); } @Override public void onClick(View v) { onItemClickListener.setOnClickView(v, (Integer) v.getTag()); } class ViewHolds extends RecyclerView.ViewHolder{ private TextView textView; public ViewHolds(View itemView) { super(itemView); textView= (TextView) itemView.findViewById(R.id.Text1); } } class ViewHoldR extends RecyclerView.ViewHolder{ public ViewHoldR(View itemView) { super(itemView); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
- recyclerView 和 ListView 一样需要适配器 所以继承RecyclerView.Adapter 然后通过
//继承RecyclerView.ViewHolder,来创建item的UI。
class ViewHolds extends RecyclerView.ViewHolder{
private TextView textView;
public ViewHolds(View itemView) {
super(itemView);
textView= (TextView) itemView.findViewById(R.id.Text1);
}
}
绑定数据
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(position+1!=this.getItemCount()){
((ViewHolds)holder).itemView.setTag(position);
((ViewHolds)holder).textView.setText(String.valueOf(position));
}
this.setPosition(position);
}
下拉刷新需要判断形况
也就是说如果滑动到底了,最后一个item去加载动画,然后最后一个Item删除。 所以做一个滑动的监听recyclerView.addOnScrollListener,然后用LinearManagerlinearLayoutManager.findLastVisibleItemPosition();来判断滑动的位置。然后找到recyclerViewAdapter最后一个item的位置recyclerViewAdapter.getItemCount()-1的位置-1是因为ItemCount从0开始的。 如何滑动的位置是最底层的,那么就删除掉最后一个item。