Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generated cardviews using recyclerview on meditate screen #676

Open
wants to merge 3 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 29 additions & 21 deletions app/src/main/java/io/neurolab/activities/MeditationHome.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,16 @@
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.CardView;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

import io.neurolab.R;
import io.neurolab.adapters.MeditationCardAdapter;
import io.neurolab.main.NeuroLab;
import io.neurolab.model.MeditationCardData;

public class MeditationHome extends AppCompatActivity {

Expand All @@ -19,19 +25,27 @@ protected void onCreate(Bundle savedInstanceState) {
setTitle(R.string.meditation);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

CardView happinessView = findViewById(R.id.happy_card);
CardView depressionView = findViewById(R.id.depression_card);
CardView sleepView = findViewById(R.id.sleep_card);
CardView travelView = findViewById(R.id.travel_card);
CardView shBreakView = findViewById(R.id.sh_break_card);
CardView lgBreakView = findViewById(R.id.lg_break_card);

setMeditationCategoryIntent(happinessView);
setMeditationCategoryIntent(depressionView);
setMeditationCategoryIntent(sleepView);
setMeditationCategoryIntent(travelView);
setMeditationCategoryIntent(shBreakView);
setMeditationCategoryIntent(lgBreakView);
List<MeditationCardData> cardData = new ArrayList<>();

cardData.add(new MeditationCardData(R.drawable.ic_happiness, "Happiness" , "Meditations while you are in a happy mood"));
cardData.add(new MeditationCardData(R.drawable.ic_depressed,"Depression" , "Meditations when you feel depressed"));
cardData.add(new MeditationCardData(R.drawable.ic_sleep,"Sleep" , "Meditations while having trouble in sleeping"));
cardData.add(new MeditationCardData(R.drawable.ic_travel,"Travel" , "Meditations when you are travelling"));
cardData.add(new MeditationCardData(R.drawable.ic_sh_break,"Short-Breaks" , "Meditations when you are on short breaks"));
cardData.add(new MeditationCardData(R.drawable.ic_lg_break,"Long-breaks" , "Meditations when you are on long breaks"));

RecyclerView recycle = (RecyclerView) findViewById(R.id.recycle);
MeditationCardAdapter gridAdapter = new MeditationCardAdapter(this, cardData);
GridLayoutManager manager = new GridLayoutManager(this,2);
recycle.setLayoutManager(manager);
recycle.setAdapter(gridAdapter);

manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return gridAdapter.isHeader(position) ? manager.getSpanCount() : 1;
}
});
}

@Override
Expand All @@ -47,11 +61,5 @@ public void onBackPressed() {
finish();
}

private void setMeditationCategoryIntent(CardView view) {
view.setOnClickListener(v -> {
startActivity(new Intent(MeditationHome.this, MeditationListActivity.class));
finish();
}
);
}
}

126 changes: 126 additions & 0 deletions app/src/main/java/io/neurolab/adapters/MeditationCardAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package io.neurolab.adapters;

import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import io.neurolab.R;
import io.neurolab.activities.MeditationListActivity;
import io.neurolab.model.MeditationCardData;

public class MeditationCardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;


private List<MeditationCardData> mdata;
private Context mcxt;

public MeditationCardAdapter(Context cxt, List<MeditationCardData> data){
this.mcxt=cxt;
this.mdata=data;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
// Here Inflating recyclerview item layout
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_meditation_cardlist_item, parent, false);
return new ItemViewHolder(itemView);
}
else if (viewType == TYPE_HEADER) {
// Here Inflating header view
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_meditation_header_image, parent, false);
return new HeaderViewHolder(itemView);
}
else return null;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {


if (holder instanceof HeaderViewHolder){

HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder;

// You have to set your header items values with the help of model class and you can modify as per your needs

headerViewHolder.mimage.setImageResource(R.drawable.meditation_bg);

}
else if (holder instanceof ItemViewHolder){

final ItemViewHolder itemViewHolder = (ItemViewHolder) holder;

itemViewHolder.mic.setImageResource(mdata.get(position-1).getIcon());
itemViewHolder.mtext1.setText(mdata.get(position-1).getHead());
itemViewHolder.mtext2.setText(mdata.get(position-1).getDesc());
itemViewHolder.mcardView.setOnClickListener(v -> {
Intent intent = new Intent(mcxt , MeditationListActivity.class);
mcxt.startActivity(intent);
});

}

}

@Override
public int getItemViewType(int position) {
if (position == 0) {
return TYPE_HEADER;
}
return TYPE_ITEM;
}

@Override
public int getItemCount() {
return mdata.size()+1;
}

public boolean isHeader(int position) {
return position == 0;
}


private static class HeaderViewHolder extends RecyclerView.ViewHolder {
private ImageView mimage;

public HeaderViewHolder(View view) {
super(view);
mimage=(ImageView) view.findViewById(R.id.image1);

}
}

public static class ItemViewHolder extends RecyclerView.ViewHolder{

private ImageView mic;
private TextView mtext1;
private TextView mtext2;
private CardView mcardView;

public ItemViewHolder(@NonNull View itemView) {
super(itemView);

mic=(ImageView) itemView.findViewById(R.id.icon2_0);
mtext1=(TextView) itemView.findViewById(R.id.text1);
mtext2=(TextView) itemView.findViewById(R.id.text2);
mcardView=(CardView) itemView.findViewById(R.id.cardview);
}
}

}


28 changes: 28 additions & 0 deletions app/src/main/java/io/neurolab/model/MeditationCardData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.neurolab.model;

public class MeditationCardData {

private final int mIcon;
private final String mHead;
private final String mDesc;

public MeditationCardData(int icon, String head, String desc) {
mIcon = icon;
mHead = head;
mDesc = desc;
}

public int getIcon() {
return mIcon;
}

public String getHead() {
return mHead;
}

public String getDesc() {
return mDesc;
}
}


59 changes: 59 additions & 0 deletions app/src/main/res/layout/activity_meditation_cardlist_item.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/cardview"
android:clickable="true"
android:layout_width="wrap_content"
android:layout_height="@dimen/bin_image_margin_top"
xmlns:cardview="http://schemas.android.com/apk/res-auto"
android:layout_margin="@dimen/layout_margin_medium"
android:layout_weight="1"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="@dimen/card_main_corner"
app:cardElevation="@dimen/card_main_elevation"
app:cardPreventCornerOverlap="false"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/gradient_meditation">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<ImageView
android:id="@+id/icon2.0"
android:layout_width="@dimen/heading_margin_top"
android:layout_height="@dimen/heading_margin_top"
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/margin_small"
/>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/layout_margin_medium"
android:orientation="vertical">

<TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@android:color/white"
android:textSize="@dimen/text_size_large"/>

<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>

</LinearLayout>
</RelativeLayout>

</android.support.v7.widget.CardView>
20 changes: 20 additions & 0 deletions app/src/main/res/layout/activity_meditation_header_image.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image1"
android:layout_width="match_parent"
android:layout_height="@dimen/meditation_bg_height"
android:scaleType="fitXY"
app:srcCompat="@drawable/meditation_bg" />

<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="@dimen/layout_margin_medium"
android:layout_marginStart="@dimen/layout_margin_medium"
android:layout_marginTop="@dimen/layout_margin_medium" />
</LinearLayout>
Loading