RecyclerView是V7下的一个控件,它提供给了用户一种拔插式的体验,这个控件相比于ListView和GridView要更加的灵活与方便。那么下面我变用代码与注释解析的方法将这个类的功能一步步的来实现出来。
首先,我们先建一个类,让它继承RecyclerView.ViewHolder
public class RecyclerViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public RecyclerViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.id_num); } }然后,开始 RecyclerView的适配器。
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> { private List<String> datas; public RecyclerViewAdapter(List<String> datas){ this.datas = datas; } @Override public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false); RecyclerViewHolder holder = new RecyclerViewHolder(view); return holder; } @Override public void onBindViewHolder(RecyclerViewHolder holder, int position) { holder.mTextView.setText(datas.get(position)); } @Override public int getItemCount() { return datas.size(); } }适配器完成后,便是准备工作完成了,接下来我们便开始写主程序
public class MainActivity extends AppCompatActivity { private List<String> datas; private RecyclerView mRecyclerView; private RecyclerViewAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDatas(); mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); mAdapter = new RecyclerViewAdapter(datas);
//下划线的添加 mRecyclerView.addItemDecoration(new RecycleViewDivider(this, LinearLayoutManager.VERTICAL, R.drawable.xiahuaxian)); mRecyclerView.setAdapter(mAdapter);
//点击事件的添加
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { // ... Toast.makeText(MainActivity.this, datas.get(position), Toast.LENGTH_LONG).show(); } @Override public void onItemLongClick(View view, int position) { Toast.makeText(MainActivity.this, "长按处于编辑状态", Toast.LENGTH_LONG).show(); // ... } }));
这里少了一个很重要的地方,没错,那便是调用最关键的CallBack方法,在这里,我们可以直接将方法体写进里面,不必再新建一个类:
ItemTouchHelper.Callback mCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT) { /** * @param