package com.example.materialtest; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.support.design.widget.Snackbar; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.Adapter; import android.support.v7.widget.RecyclerView.ViewHolder; import android.support.v7.widget.helper.ItemTouchHelper; import android.support.v7.widget.helper.ItemTouchHelper.Callback; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; /** * recyclerview demo * * @author teamlab * */ public class RecyclerViewActivity extends AppCompatActivity { private RecyclerView recyclerView; private Adapter<MyHolder> adapter; private List<String> data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_recycler); final SwipeRefreshLayout refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh); refreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); refreshLayout.setSize(SwipeRefreshLayout.LARGE); refreshLayout.setProgressBackgroundColorSchemeResource(android.R.color.holo_blue_bright); refreshLayout.setProgressViewEndTarget(true, 100); refreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { Toast.makeText(getApplicationContext(), "onRefresh", Toast.LENGTH_LONG).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { refreshLayout.setRefreshing(false); } }, 5000); } }); // ��仰��Ϊ�ˣ���һ�ν���ҳ���ʱ����ʾ���ؽ����� // refreshLayout.setProgressViewOffset(false, 0, // (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, // getResources().getDisplayMetrics())); // refreshLayout.setRefreshing(true); recyclerView = (RecyclerView) findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); // ����dumyֵ data = new ArrayList<String>(); for (int i = 0; i < 50; i++) { data.add("values :" + i); } adapter = new MyAdapter(data, this); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); // �������� ItemTouchHelper touchHelper = new ItemTouchHelper(new ItemTouchCallback()); touchHelper.attachToRecyclerView(recyclerView); // ���÷ָ��� recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); } /** * recyclerview �����϶��¼������һ����¼� * * @author teamlab * */ private class ItemTouchCallback extends ItemTouchHelper.Callback { @Override public int getMovementFlags(RecyclerView recyclerView, ViewHolder holder) { return Callback.makeMovementFlags(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT); } @Override public boolean onMove(RecyclerView recyclerView, ViewHolder viewHolder, ViewHolder target) { // �����϶��¼� final int from = viewHolder.getAdapterPosition(); final int to = target.getAdapterPosition(); String prevText = data.remove(from); data.add(to > from ? to - 1 : to, prevText); adapter.notifyItemMoved(from, to); return true; } @Override public void onSwiped(ViewHolder holder, int direction) { data.remove(holder.getAdapterPosition()); // direction �������� adapter.notifyItemRemoved(holder.getAdapterPosition()); } @Override public void onSelectedChanged(ViewHolder viewHolder, int actionState) { MyHolder holder = (MyHolder) viewHolder; if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { holder.tv.setBackgroundColor(Color.CYAN); } super.onSelectedChanged(viewHolder, actionState); } @Override public void clearView(RecyclerView recyclerView, ViewHolder viewHolder) { // ���ݻ�ԭ��������ԭonSelectedChanged�IJ��� super.clearView(recyclerView, viewHolder); MyHolder holder = (MyHolder) viewHolder; holder.tv.setBackgroundColor(Color.WHITE); } } /** * recyclerview����¼�����item��xml������ * * @param v */ public void onItemClick(View v) { MyHolder holder = (MyHolder) recyclerView.getChildViewHolder(v); final int position = holder.getAdapterPosition(); if (position == RecyclerView.NO_POSITION) { return; } Snackbar.make(v, "ȷ��ɾ����", Snackbar.LENGTH_LONG).setActionTextColor(Color.WHITE).setAction("ȷ��", new OnClickListener() { @Override public void onClick(View v) { data.remove(position); // ���ô˷�������ʹ��Ĭ�ϵĶ��� adapter.notifyItemRemoved(position); } }).show(); } public static class MyHolder extends RecyclerView.ViewHolder { TextView tv; public MyHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); } } public static class MyAdapter extends RecyclerView.Adapter<MyHolder> { private List<String> data; private Context context; public MyAdapter(List<String> data, Context context) { super(); this.data = data; this.context = context; } @Override public int getItemCount() { return data.size(); } @Override public void onBindViewHolder(MyHolder holder, int position) { String txt = data.get(position); holder.tv.setText("item:" + txt); } @Override public MyHolder onCreateViewHolder(ViewGroup container, int position) { LayoutInflater inflater = LayoutInflater.from(context); MyHolder holder = new MyHolder(inflater.inflate(R.layout.layout_recycler_item, container, false)); return holder; } } }