package com.marshalchen.common.demoofui.sampleModules; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.GestureDetectorCompat; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.marshalchen.common.demoofui.R; /** * Created by cym on 14-10-20. */ public class RecyclerViewSample extends Activity { private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recycler_view_sample); mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); // use this setting to improve performance if you know that changes // in content do not change the layout size of the RecyclerView mRecyclerView.setHasFixedSize(true); // use a linear layout manager mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); // specify an adapter (see also next example) String[] mDataset = new String[4]; for (int i = 0; i < 4; i++) { mDataset[i] = i + "hh"; } mAdapter = new MyAdapter(mDataset); mRecyclerView.setAdapter(mAdapter); LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); layoutManager.scrollToPosition(0); mRecyclerView.setLayoutManager(layoutManager); // RecyclerView.ItemDecoration itemDecoration = // new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST); // mRecyclerView.addItemDecoration(itemDecoration); // this is the default; // this call is actually only necessary with custom ItemAnimators mRecyclerView.setItemAnimator(new DefaultItemAnimator()); // onClickDetection is done in this Activity's OnItemTouchListener // with the help of a GestureDetector; // Tip by Ian Lake on G+ in a comment to this post: // https://plus.google.com/+LucasRocha/posts/37U8GWtYxDE // mRecyclerView.addOnItemTouchListener(this); // gesturedetector = // new GestureDetectorCompat(this, new RecyclerViewDemoOnGestureListener()); } } class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private String[] mDataset; // Provide a reference to the views for each data item // Complex data items may need more than one view per item, and // you provide access to all the views for a data item in a view holder public static class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case public TextView mTextView; public ViewHolder(View v) { super(v); mTextView = (TextView) v.findViewById(R.id.list_item_text); } } // Provide a suitable constructor (depends on the kind of dataset) public MyAdapter(String[] myDataset) { mDataset = myDataset; } // Create new views (invoked by the layout manager) @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.android_animations_item, parent, false); // set the view's size, margins, paddings and layout parameters ViewHolder vh = new ViewHolder(v); return vh; } // Replace the contents of a view (invoked by the layout manager) @Override public void onBindViewHolder(ViewHolder holder, int position) { // - get element from your dataset at this position // - replace the contents of the view with that element holder.mTextView.setText(mDataset[position]); } // Return the size of your dataset (invoked by the layout manager) @Override public int getItemCount() { return mDataset.length; } }