Tuesday, July 26, 2016

CardView Android


row layout
<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginBottom="5dp" 
 android:layout_marginLeft="10dp" 
 android:layout_marginRight="10dp" 
 android:layout_marginTop="5dp">

    <RelativeLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:background="?android:attr/selectableItemBackground" 
 android:clickable="true" 
 android:focusable="true" 
 android:orientation="vertical">

        <TextView 
 android:id="@+id/title" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_alignParentTop="true" 
 android:textSize="27dp" />

    </RelativeLayout>
</android.support.v7.widget.CardView>
 
 
_Object class
 
public class _Object {
    String Title;

    public String getTitle() {
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }
}
 
  
MyAdapter
 
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private List<_Object> moviesList;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView title, year, genre;

        public MyViewHolder(View view) {
            super(view);
            title = (TextView) view.findViewById(R.id.title);
        }
    }


    public MyAdapter(List<_Object> moviesList) {
        this.moviesList = moviesList;
    }

    @Override 
 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override 
 public void onBindViewHolder(MyViewHolder holder, int position) {
        _Object movie = moviesList.get(position);
        holder.title.setText(movie.getTitle());
    }

    @Override 
 public int getItemCount() {
        return moviesList.size();
    }
}
 
 RecyclerView
 
<android.support.v7.widget.RecyclerView 
 android:id="@+id/recycler_view" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:scrollbars="vertical" />
 
 
ClickListener class
 
public interface ClickListener {
    void onClick(View view, int position);

    void onLongClick(View view, int position);
}
 


RecyclerTouchListener class
 
public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

    private GestureDetector gestureDetector;
    private ClickListener clickListener;

    public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
        this.clickListener = clickListener;
        gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override 
 public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }

            @Override 
 public void onLongPress(MotionEvent e) {
                View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                if (child != null && clickListener != null) {
                    clickListener.onLongClick(child, recyclerView.getChildPosition(child));
                }
            }
        });
    }

    @Override 
 
 public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

        View child = rv.findChildViewUnder(e.getX(), e.getY());
        if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
            clickListener.onClick(child, rv.getChildPosition(child));
        }
        return false;
    }

    @Override 
 public void onTouchEvent(RecyclerView rv, MotionEvent e) {
    }

    @Override 
 public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}
MainActivity
 
public class MainActivity extends AppCompatActivity {
    private List<_Object> arrayList = new ArrayList<>();
    private RecyclerView recyclerView;
    private MyAdapter mAdapter;

    @Override 
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

        mAdapter = new MyAdapter(arrayList);
        for (int i = 0; i < 100; i++) {
            _Object ob = new _Object();
            ob.setTitle("Title " + i);
            arrayList.add(ob);
        }
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);
        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new ClickListener() {
            @Override 
 public void onClick(View view, int position) {
                Toast.makeText(getApplicationContext(), "Click: "+arrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
            }

            @Override 
 public void onLongClick(View view, int position) {
                Toast.makeText(getApplicationContext(),"Long Click: "+ arrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
            }
        }));
    }
}
 
 

No comments:

Post a Comment