https://android--code.blogspot.com/2015/12/android-recyclerview-add-remove-item.html
Sunday, December 20, 2015
Android RecyclerView add remove item example
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".MainActivity"
android:background="#ecb0dd"
>
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="0dp"
android:background="@android:color/transparent"
android:drawableLeft="@drawable/ic_add_circle_black_24dp"
android:drawableStart="@drawable/ic_add_circle_black_24dp"
android:text="Add an item"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:layout_below="@id/btn_add"
>
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
custom_view.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="4dp"
card_view:cardMaxElevation="4dp"
card_view:cardElevation="2dp"
card_view:contentPadding="5dp"
>
<RelativeLayout
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="3dp"
>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="#000"
android:textSize="25dp"
android:textStyle="bold"
android:layout_margin="2dp"
android:padding="10dp"
android:layout_gravity="center"
android:gravity="center"
/>
<ImageButton
android:id="@+id/ib_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_close_circle_outline_white_18dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:background="@android:color/transparent"
android:padding="0dp"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
MainActivity.java
package com.cfsuman.me.androidcode;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private Context mContext;
RelativeLayout mRelativeLayout;
private RecyclerView mRecyclerView;
private Button mButtonAdd;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private Random mRandom = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
// Request window feature action bar
requestWindowFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get the application context
mContext = getApplicationContext();
// Change the action bar color
getSupportActionBar().setBackgroundDrawable(
new ColorDrawable(Color.parseColor("#FFFF00BF"))
);
// Get the widgets reference from XML layout
mRelativeLayout = (RelativeLayout) findViewById(R.id.rl);
mButtonAdd = (Button) findViewById(R.id.btn_add);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
// Initialize a new String array
final String[] animals = {
"Aardvark",
"Albatross",
"Alligator",
"Alpaca",
"Ant",
"Anteater",
"Antelope",
"Ape",
"Armadillo",
"Donkey",
"Baboon",
"Badger",
"Barracuda",
"Bear",
"Beaver",
"Bee"
};
// Intilize an array list from array
final List<String> animalsList = new ArrayList(Arrays.asList(animals));
// Define a layout for RecyclerView
mLayoutManager = new GridLayoutManager(mContext,3);
mRecyclerView.setLayoutManager(mLayoutManager);
// Initialize a new instance of RecyclerView Adapter instance
mAdapter = new AnimalsAdapter(mContext,animalsList);
// Set the adapter for RecyclerView
mRecyclerView.setAdapter(mAdapter);
// Set a click listener for add item button
mButtonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Specify the position
int position = 0;
String itemLabel = "" + mRandom.nextInt(100);
// Add an item to animals list
animalsList.add(position,"" + itemLabel);
/*
public final void notifyItemInserted (int position)
Notify any registered observers that the item reflected at position has been
newly inserted. The item previously at position is now at position position + 1.
This is a structural change event. Representations of other existing items
in the data set are still considered up to date and will not be rebound,
though their positions may be altered.
Parameters
position : Position of the newly inserted item in the data set
*/
// Notify the adapter that an item inserted
mAdapter.notifyItemInserted(position);
/*
public void scrollToPosition (int position)
Convenience method to scroll to a certain position. RecyclerView does not
implement scrolling logic, rather forwards the call to scrollToPosition(int)
Parameters
position : Scroll to this adapter position
*/
// Scroll to newly added item position
mRecyclerView.scrollToPosition(position);
// Show the added item label
Toast.makeText(mContext,"Added : " + itemLabel,Toast.LENGTH_SHORT).show();
}
});
}
}
AnimalsAdapter.java
package com.cfsuman.me.androidcode;
import android.content.Context;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.drawable.GradientDrawable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
import java.util.Random;
public class AnimalsAdapter extends RecyclerView.Adapter<AnimalsAdapter.ViewHolder>{
private List<String> mDataSet;
private Context mContext;
private Random mRandom = new Random();
public AnimalsAdapter(Context context,List<String> list){
mDataSet = list;
mContext = context;
}
public static class ViewHolder extends RecyclerView.ViewHolder{
public TextView mTextView;
public ImageButton mRemoveButton;
public RelativeLayout mRelativeLayout;
public ViewHolder(View v){
super(v);
mTextView = (TextView) v.findViewById(R.id.tv);
mRemoveButton = (ImageButton) v.findViewById(R.id.ib_remove);
mRelativeLayout = (RelativeLayout) v.findViewById(R.id.rl);
}
}
@Override
public AnimalsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
// Create a new View
View v = LayoutInflater.from(mContext).inflate(R.layout.custom_view,parent,false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position){
holder.mTextView.setText((String)mDataSet.get(position));
// Generate a random color
int color = getRandomHSVColor();
// Set a random color for TextView background
holder.mTextView.setBackgroundColor(getLighterColor(color));
// Set a text color for TextView
holder.mTextView.setTextColor(getReverseColor(color));
// Set a gradient background for RelativeLayout
holder.mRelativeLayout.setBackground(getGradientDrawable());
// Emboss the TextView text
applyEmbossMaskFilter(holder.mTextView);
// Set a click listener for TextView
holder.mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String animal = mDataSet.get(position);
Toast.makeText(mContext,animal,Toast.LENGTH_SHORT).show();
}
});
// Set a click listener for item remove button
holder.mRemoveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Get the clicked item label
String itemLabel = mDataSet.get(position);
// Remove the item on remove/button click
mDataSet.remove(position);
/*
public final void notifyItemRemoved (int position)
Notify any registered observers that the item previously located at position
has been removed from the data set. The items previously located at and
after position may now be found at oldPosition - 1.
This is a structural change event. Representations of other existing items
in the data set are still considered up to date and will not be rebound,
though their positions may be altered.
Parameters
position : Position of the item that has now been removed
*/
notifyItemRemoved(position);
/*
public final void notifyItemRangeChanged (int positionStart, int itemCount)
Notify any registered observers that the itemCount items starting at
position positionStart have changed. Equivalent to calling
notifyItemRangeChanged(position, itemCount, null);.
This is an item change event, not a structural change event. It indicates
that any reflection of the data in the given position range is out of date
and should be updated. The items in the given range retain the same identity.
Parameters
positionStart : Position of the first item that has changed
itemCount : Number of items that have changed
*/
notifyItemRangeChanged(position,mDataSet.size());
// Show the removed item label
Toast.makeText(mContext,"Removed : " + itemLabel,Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount(){
return mDataSet.size();
}
// Custom method to apply emboss mask filter to TextView
protected void applyEmbossMaskFilter(TextView tv){
EmbossMaskFilter embossFilter = new EmbossMaskFilter(
new float[]{1f, 5f, 1f}, // direction of the light source
0.8f, // ambient light between 0 to 1
8, // specular highlights
7f // blur before applying lighting
);
tv.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
tv.getPaint().setMaskFilter(embossFilter);
}
// Custom method to generate random HSV color
protected int getRandomHSVColor(){
// Generate a random hue value between 0 to 360
int hue = mRandom.nextInt(361);
// We make the color depth full
float saturation = 1.0f;
// We make a full bright color
float value = 1.0f;
// We avoid color transparency
int alpha = 255;
// Finally, generate the color
int color = Color.HSVToColor(alpha, new float[]{hue, saturation, value});
// Return the color
return color;
}
// Custom method to create a GradientDrawable object
protected GradientDrawable getGradientDrawable(){
GradientDrawable gradient = new GradientDrawable();
gradient.setGradientType(GradientDrawable.SWEEP_GRADIENT);
gradient.setColors(new int[]{getRandomHSVColor(), getRandomHSVColor(),getRandomHSVColor()});
return gradient;
}
// Custom method to get a darker color
protected int getDarkerColor(int color){
float[] hsv = new float[3];
Color.colorToHSV(color, hsv);
hsv[2] = 0.8f *hsv[2];
return Color.HSVToColor(hsv);
}
// Custom method to get a lighter color
protected int getLighterColor(int color){
float[] hsv = new float[3];
Color.colorToHSV(color,hsv);
hsv[2] = 0.2f + 0.8f * hsv[2];
return Color.HSVToColor(hsv);
}
// Custom method to get reverse color
protected int getReverseColor(int color){
float[] hsv = new float[3];
Color.RGBToHSV(
Color.red(color), // Red value
Color.green(color), // Green value
Color.blue(color), // Blue value
hsv
);
hsv[0] = (hsv[0] + 180) % 360;
return Color.HSVToColor(hsv);
}
}
build.gradle [dependencies]
compile 'com.android.support:recyclerview-v7:23.0.1'
compile 'com.android.support:cardview-v7:23.0.1'
- Get link
- X
- Other Apps
- Get link
- X
- Other Apps
Comments
Post a Comment