From b55bee5fbab161992de4263c0850458d9507662a Mon Sep 17 00:00:00 2001 From: Georg Reisinger <43533139+GeorgReisinger@users.noreply.github.com> Date: Thu, 31 Jan 2019 12:22:47 +0100 Subject: [PATCH] New Design --- .idea/assetWizardSettings.xml | 153 ------------------ .idea/caches/gradle_models.ser | Bin 271873 -> 271870 bytes .idea/gradle.xml | 6 - .idea/misc.xml | 40 +---- .idea/vcs.xml | 2 +- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 5 +- .../smartshopper/activitys/Dash.java | 5 +- .../activitys/ItemListActivity.java | 79 +++++++++ .../activitys/ShoppinglistDetails.java | 30 ++-- .../smartshopper/db/Database.java | 68 +++++++- .../shoppinglist/ShoppinglistAdapter.java | 4 +- .../shoppinglist/details/DetailsAdapter.java | 64 +++++--- .../details/item/ItemAdapter.java | 70 ++++++-- app/src/main/res/drawable/rechteck.xml | 14 ++ .../main/res/layout/activity_item_list.xml | 83 ++++++++++ app/src/main/res/layout/cardviewgroup.xml | 84 ++++++---- app/src/main/res/layout/cardviewitem.xml | 55 +++---- .../main/res/layout/cardviewshoppinglist.xml | 30 +++- app/src/main/res/values/strings.xml | 1 + 20 files changed, 477 insertions(+), 317 deletions(-) delete mode 100644 .idea/assetWizardSettings.xml create mode 100644 app/src/main/java/at/smartshopper/smartshopper/activitys/ItemListActivity.java create mode 100644 app/src/main/res/drawable/rechteck.xml create mode 100644 app/src/main/res/layout/activity_item_list.xml diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml deleted file mode 100644 index 70ddf47..0000000 --- a/.idea/assetWizardSettings.xml +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 2f1fda84f6330e2dba92ee93155516563bc1fcd7..38396b4b9b0929d9484ff6f7698f00b98321f006 100644 GIT binary patch delta 41936 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 diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f43d428..2996d53 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -8,12 +8,6 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index 51fa3e5..703e5d4 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,41 +1,11 @@ - - - + + + + - + diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 4fbac2b..2b2bc6c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,4 +39,5 @@ dependencies { implementation 'com.android.support:swiperefreshlayout:28.0.0-alpha1' implementation 'com.android.support:cardview-v7:28.0.0' implementation 'com.github.danielnilsson9:color-picker-view:1.4.0@aar' + implementation 'com.android.support:recyclerview-v7:28.0.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 521b65b..3d3910e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,7 +12,10 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true"> - + + diff --git a/app/src/main/java/at/smartshopper/smartshopper/activitys/Dash.java b/app/src/main/java/at/smartshopper/smartshopper/activitys/Dash.java index bf6a4b0..a941daf 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/activitys/Dash.java +++ b/app/src/main/java/at/smartshopper/smartshopper/activitys/Dash.java @@ -187,6 +187,7 @@ public class Dash extends AppCompatActivity implements ShoppinglistAdapter.OnIte }else{ colorstring = "#" + dbShoppinglist.getcolor(); } + this.color = colorstring; colorBtn.setBackgroundColor(Color.parseColor(colorstring)); name.setText(dbShoppinglist.getname()); description.setText(dbShoppinglist.getdescription()); @@ -410,11 +411,9 @@ public class Dash extends AppCompatActivity implements ShoppinglistAdapter.OnIte public void onItemClick(String sl_id) { try { db.delShoppinglist(sl_id); - showOwnShoppingList(FirebaseAuth.getInstance().getCurrentUser().getUid()); + refreshOwnShoppinglist(FirebaseAuth.getInstance().getCurrentUser().getUid()); } catch (SQLException e) { e.printStackTrace(); - } catch (JSONException e) { - e.printStackTrace(); } } diff --git a/app/src/main/java/at/smartshopper/smartshopper/activitys/ItemListActivity.java b/app/src/main/java/at/smartshopper/smartshopper/activitys/ItemListActivity.java new file mode 100644 index 0000000..f15f8f1 --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/activitys/ItemListActivity.java @@ -0,0 +1,79 @@ +package at.smartshopper.smartshopper.activitys; + +import android.content.Intent; +import android.os.Bundle; +import android.app.Activity; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; + +import org.json.JSONException; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import at.smartshopper.smartshopper.R; +import at.smartshopper.smartshopper.db.Database; +import at.smartshopper.smartshopper.shoppinglist.details.Details; +import at.smartshopper.smartshopper.shoppinglist.details.DetailsAdapter; +import at.smartshopper.smartshopper.shoppinglist.details.item.Item; +import at.smartshopper.smartshopper.shoppinglist.details.item.ItemAdapter; + +public class ItemListActivity extends Activity implements ItemAdapter.OnItemEditClicked, ItemAdapter.OnItemDelClicked { + private String group_id; + private String sl_id; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_item_list); + + Intent myIntent = getIntent(); // gets the previously created intent + this.group_id = myIntent.getStringExtra("group_id"); // will return "FirstKeyValue" + this.sl_id = myIntent.getStringExtra("sl_id"); // will return "SecondKeyValue" + + + try { + showItems(group_id, sl_id); + } catch (SQLException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + + + } + + private void showItems(String group_id, String sl_id) throws SQLException, JSONException { + RecyclerView itemsListRecycler = findViewById(R.id.itemsListRecycler); + itemsListRecycler.setHasFixedSize(true); + itemsListRecycler.setLayoutManager(new LinearLayoutManager(this)); + List itemList = new Database().getItemsOfGroup(group_id, sl_id); + + + ItemAdapter itemAdapter = new ItemAdapter(itemList); + itemAdapter.setOnItemEditClick(this); + itemAdapter.setItemDelClick(this); + + itemsListRecycler.setAdapter(itemAdapter); + } + + @Override + public void onBackPressed() { + finish(); + Intent intent = new Intent(this, ShoppinglistDetails.class); + intent.putExtra("sl_id", sl_id); + startActivity(intent); + } + + @Override + public void onItemDelClicked(String item_id, String group_id, String sl_id) { + + } + + @Override + public void onItemEditClicked(String item_id, String group_id, String sl_id, String newname, int newcount) { + + } +} diff --git a/app/src/main/java/at/smartshopper/smartshopper/activitys/ShoppinglistDetails.java b/app/src/main/java/at/smartshopper/smartshopper/activitys/ShoppinglistDetails.java index 076eab5..03e963e 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/activitys/ShoppinglistDetails.java +++ b/app/src/main/java/at/smartshopper/smartshopper/activitys/ShoppinglistDetails.java @@ -6,7 +6,6 @@ import android.os.Build; import android.os.Bundle; import android.app.Activity; import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Gravity; @@ -20,24 +19,23 @@ import android.widget.PopupWindow; import android.widget.Toast; import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.FirebaseUser; import com.squareup.picasso.Picasso; import org.json.JSONException; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; import at.smartshopper.smartshopper.R; import at.smartshopper.smartshopper.db.Database; import at.smartshopper.smartshopper.shoppinglist.Shoppinglist; -import at.smartshopper.smartshopper.shoppinglist.ShoppinglistAdapter; import at.smartshopper.smartshopper.shoppinglist.details.Details; import at.smartshopper.smartshopper.shoppinglist.details.DetailsAdapter; import at.smartshopper.smartshopper.shoppinglist.details.group.Group; import at.smartshopper.smartshopper.shoppinglist.details.item.Item; -public class ShoppinglistDetails extends Activity implements DetailsAdapter.OnGroupEditClicked, DetailsAdapter.OnGroupDeleteClicked, DetailsAdapter.OnItemAddClicked { +public class ShoppinglistDetails extends Activity implements DetailsAdapter.OnGroupEditClicked, DetailsAdapter.OnGroupDeleteClicked, DetailsAdapter.OnItemAddClicked, DetailsAdapter.OnCardClicked { private Database db = new Database(); private FloatingActionButton fab; @@ -122,9 +120,9 @@ public class ShoppinglistDetails extends Activity implements DetailsAdapter.OnGr if (fromDB) { Group dbgroup = db.getGroup(groupid, sl_id); String colorstring; - if(dbgroup.getColor().contains("#")){ + if (dbgroup.getColor().contains("#")) { colorstring = dbgroup.getColor(); - }else{ + } else { colorstring = "#" + dbgroup.getColor(); } color.setBackgroundColor(Color.parseColor(colorstring)); @@ -207,9 +205,9 @@ public class ShoppinglistDetails extends Activity implements DetailsAdapter.OnGr int color = Integer.parseInt(data.getData().toString()); this.colorString = colorToHexString(color); String colorstring; - if(this.colorString.contains("#")){ + if (this.colorString.contains("#")) { colorstring = this.colorString; - }else{ + } else { colorstring = "#" + this.colorString; } int colorint = Color.parseColor(colorstring); @@ -239,16 +237,19 @@ public class ShoppinglistDetails extends Activity implements DetailsAdapter.OnGr RecyclerView detailsRecycleView = (RecyclerView) findViewById(R.id.groupRecycle); detailsRecycleView.setHasFixedSize(true); detailsRecycleView.setLayoutManager(new LinearLayoutManager(this)); - List
detailsList = db.getListDetails(sl_id); + List
detailsList = db.getListDetails(sl_id); + + DetailsAdapter detailsAdapter = new DetailsAdapter(detailsList); detailsAdapter.setGroupEditClick(this); detailsAdapter.setGroupDeleteClick(this); detailsAdapter.setItemAddClick(this); + detailsAdapter.setCardClick(this); + detailsRecycleView.setAdapter(detailsAdapter); } - private void showPopupItemEdit(final boolean fromDB, final String sl_id, final String group_id, String item_id, View v) throws SQLException, JSONException { final LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); @@ -359,4 +360,13 @@ public class ShoppinglistDetails extends Activity implements DetailsAdapter.OnGr } } + + @Override + public void onCardClick(String group_id, String sl_id, View v) { + finish(); + Intent intent = new Intent(this, ItemListActivity.class); + intent.putExtra("group_id", group_id); + intent.putExtra("sl_id", sl_id); + startActivity(intent); + } } diff --git a/app/src/main/java/at/smartshopper/smartshopper/db/Database.java b/app/src/main/java/at/smartshopper/smartshopper/db/Database.java index 7b5009a..8aa45f0 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/db/Database.java +++ b/app/src/main/java/at/smartshopper/smartshopper/db/Database.java @@ -61,6 +61,44 @@ public class Database { sqlUpdate2Param("DELETE FROM \"Group\" WHERE group_id = ? AND sl_id = ?", group_id, sl_id); } + /** + * Bearbeitet ein Item in der Datenbank + * @param item_id Daqs zu bearbeitende item + * @param group_id Die gruppe in dem da sitem ist + * @param sl_id die shoppinglist in dem das item ist + * @param newname der neue name + * @param newcount die neue anzahl + * @throws SQLException + * @throws JSONException + */ + public void editItem(String item_id, String group_id, String sl_id, String newname, int newcount) throws SQLException, JSONException { + Item olditem = getItem(item_id); + + if (!olditem.getName().equals(newname) && newname != null) { + sqlUpdate4Param("UPDATE \"Item\" SET name = ? WHERE item_id = ? AND group_id = ? AND sl_id = ?", newname, item_id, group_id, sl_id); + } + + /* + if (!oldgroup.getHidden().equals(newhidden) && newhidden != null) { + sqlUpdate3Param("UPDATE \"Group\" SET hidden = ? WHERE group_id = ? AND sl_id = ?", newhidden, group_id, sl_id); + } +*/ + if (Integer.parseInt(olditem.getCount()) != newcount) { + sqlUpdate4ParamFirstInt("UPDATE \"Item\" SET count = ? WHERE item_id = ? AND group_id = ? AND sl_id = ?", newcount, item_id, group_id, sl_id); + } + } + + + /** + * Löscht ein item + * @param item_id Item id + * @param group_id group id + * @param sl_id shoppoinglist id + */ + public void deleteItem(String item_id, String group_id, String sl_id) throws SQLException { + sqlUpdate3Param("DELETE FROM \"Item\" WHERE item_id = ? AND group_id = ? AND sl_id = ?", item_id, group_id, sl_id); + } + /** * Fügt ein neues Item der Datenbank hinzu * @param group_id Die group id in der das neue item angezeigt werden soll @@ -342,6 +380,28 @@ public class Database { } + /** + * Holt alle Items einer bestimmten gruppe + * @param group_id Gruppe welche geholt werden soll + * @param sl_id Die Shoppinglist in der sich die gruppe befindet + * @return + * @throws SQLException + * @throws JSONException + */ + public List getItemsOfGroup(String group_id, String sl_id) throws SQLException, JSONException { + List
details = getListDetails(sl_id); + ArrayList result = new ArrayList(); + + for(Details d : details){ + String group_idtmp = d.getGroup().getGroup_id(); + if(group_idtmp.equals(group_id)){ + result = d.getItems(); + } + } + + return result; + } + /** * Generiert eine neue 8 stellige sl_id * @@ -386,7 +446,7 @@ public class Database { * @throws SQLException * @throws JSONException */ - private List getItems(String sl_id) throws SQLException, JSONException { + public List getItems(String sl_id) throws SQLException, JSONException { String SQL = "SELECT row_to_json(\"Item\") AS obj FROM \"Item\" JOIN \"Group\" USING (group_id) WHERE \"Group\".sl_id = ?"; connectDatabase(); @@ -482,17 +542,15 @@ public class Database { * @param param2 ein 2. Parameter * @param param3 ein 3. parameter * @param param4 ein 4. Parameter - * @param param5 ein 5. Parameter * @throws SQLException */ - private void sqlUpdate5Param(String SQL, String param, String param2, String param3, String param4, String param5) throws SQLException { + private void sqlUpdate4ParamFirstInt(String SQL, int param, String param2, String param3, String param4) throws SQLException { connectDatabase(); PreparedStatement pstmt = conect.prepareStatement(SQL); - pstmt.setString(1, param); + pstmt.setInt(1, param); pstmt.setString(2, param2); pstmt.setString(3, param3); pstmt.setString(4, param4); - pstmt.setString(5, param5); pstmt.executeUpdate(); } diff --git a/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/ShoppinglistAdapter.java b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/ShoppinglistAdapter.java index 1dee8f7..cf751a8 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/ShoppinglistAdapter.java +++ b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/ShoppinglistAdapter.java @@ -100,7 +100,7 @@ public class ShoppinglistAdapter extends RecyclerView.Adapter details) { this.details = details; @@ -63,30 +65,42 @@ public class DetailsAdapter extends RecyclerView.Adapter itemsList = details.get(i).getItems(); ItemAdapter itemAdapter = new ItemAdapter(itemsList); - itemsrecycle.setAdapter(itemAdapter); + final Database db = new Database(); + + + int cardcolor; + try { + cardcolor = Color.parseColor(details.get(i).getGroup().getColor()); + } catch (Exception e) { + cardcolor = Color.parseColor("#FFFFFF"); + } + groupColor.setBackgroundColor(cardcolor); + + groupName.setText(details.get(i).getGroup().getName()); + Picasso.get().load(R.drawable.delete).into(deleteGroup); + Picasso.get().load(R.drawable.add).into(addItem); + Picasso.get().load(R.drawable.bearbeiten).into(editGroup); + + viewHolder.groupCard.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onCardClicked.onCardClick(details.get(i).getGroup().getGroup_id(), details.get(i).getGroup().getSl_idd(), v); + } + }); + + addItem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -109,7 +123,20 @@ public class DetailsAdapter extends RecyclerView.Adapter { private List data; + private OnItemEditClicked onItemEditClick; + private OnItemDelClicked onItemDelClicked; - public ItemAdapter(List data){ + public ItemAdapter(List data) { this.data = data; } /** * Erstellt einen Neuen view holder mit aktueller view + * * @param viewGroup * @param i * @return @@ -40,20 +45,52 @@ public class ItemAdapter extends RecyclerView.Adapter /** * Setzt alle Daten in die View elemente + * * @param myViewHolder Das View Holder Objekt mit allen elementen - * @param i Der Index welcher aus der data list genommen werden soll + * @param i Der Index welcher aus der data list genommen werden soll */ @Override - public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) { - TextView itemName = myViewHolder.itemName; - TextView itemAnzahl = myViewHolder.itemAnzahl; - ImageView itemBearbeiten = myViewHolder.itemBearbeiten; + public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) { + final TextView itemName = myViewHolder.itemName; + final TextView itemAnzahl = myViewHolder.itemAnzahl; + CheckBox itemErledigt = myViewHolder.erledigtItem; ImageView itemDel = myViewHolder.itemDel; itemName.setText(data.get(i).getName()); itemAnzahl.setText(data.get(i).getCount()); - Picasso.get().load(R.drawable.bearbeiten).into(itemBearbeiten); Picasso.get().load(R.drawable.delete).into(itemDel); + + /* + itemName.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onItemEditClick.onItemEditClicked(data.get(i).getItem_id(), data.get(i).getGroup_id(), data.get(i).getSl_id(), itemName.getText().toString(), Integer.parseInt(itemAnzahl.getText().toString())); + } + }); + + itemDel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onItemDelClicked.onItemDelClicked(data.get(i).getItem_id(), data.get(i).getGroup_id(), data.get(i).getSl_id()); + } + }); +*/ + } + + public interface OnItemDelClicked { + void onItemDelClicked(String item_id, String group_id, String sl_id); + } + + public void setItemDelClick(OnItemDelClicked onItemDelClicked){ + this.onItemDelClicked = onItemDelClicked; + } + + public interface OnItemEditClicked { + void onItemEditClicked(String item_id, String group_id, String sl_id, String newname, int newcount); + } + + public void setOnItemEditClick(OnItemEditClicked onItemEditClick) { + this.onItemEditClick = onItemEditClick; } @Override @@ -64,18 +101,19 @@ public class ItemAdapter extends RecyclerView.Adapter /** * Haltet alle elemente. Durch ein Objekt von dem kann jedes Element welches hier drinnen angeführt ist verwendet werden */ - public static class MyViewHolder extends RecyclerView.ViewHolder{ + public static class MyViewHolder extends RecyclerView.ViewHolder { TextView itemName, itemAnzahl; - ImageView itemBearbeiten, itemDel; + ImageView itemDel; + CheckBox erledigtItem; - public MyViewHolder(View itemView){ + public MyViewHolder(View itemView) { super(itemView); - this.itemName = (TextView)itemView.findViewById(R.id.nameItem); - this.itemAnzahl = (TextView)itemView.findViewById(R.id.anzahlItem); - this.itemBearbeiten = (ImageView)itemView.findViewById(R.id.itemBearbeiten); - this.itemDel = (ImageView)itemView.findViewById(R.id.itemDel); + this.itemName = (TextView) itemView.findViewById(R.id.nameItem); + this.itemAnzahl = (TextView) itemView.findViewById(R.id.anzahlItem); + this.itemDel = (ImageView) itemView.findViewById(R.id.itemDel); + this.erledigtItem = (CheckBox) itemView.findViewById(R.id.erledigtItem); } } } diff --git a/app/src/main/res/drawable/rechteck.xml b/app/src/main/res/drawable/rechteck.xml new file mode 100644 index 0000000..f22dcb0 --- /dev/null +++ b/app/src/main/res/drawable/rechteck.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_item_list.xml b/app/src/main/res/layout/activity_item_list.xml new file mode 100644 index 0000000..16be527 --- /dev/null +++ b/app/src/main/res/layout/activity_item_list.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cardviewgroup.xml b/app/src/main/res/layout/cardviewgroup.xml index 69029b2..5e141a5 100644 --- a/app/src/main/res/layout/cardviewgroup.xml +++ b/app/src/main/res/layout/cardviewgroup.xml @@ -11,14 +11,47 @@ app:cardPreventCornerOverlap="true" app:cardUseCompatPadding="true"> - + android:layout_height="match_parent"> + + + + + android:id="@+id/constraintLayout" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:layout_marginEnd="8dp" + android:padding="8dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="@+id/guideline3" + app:layout_constraintTop_toTopOf="parent"> - - - - - - - + + diff --git a/app/src/main/res/layout/cardviewitem.xml b/app/src/main/res/layout/cardviewitem.xml index 8892c33..29ea3f0 100644 --- a/app/src/main/res/layout/cardviewitem.xml +++ b/app/src/main/res/layout/cardviewitem.xml @@ -3,50 +3,45 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/itemCardView" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + app:cardBackgroundColor="#DBDBDB" + app:cardCornerRadius="8dp"> - + + + android:text="ItemName" /> - - - - + - - + + diff --git a/app/src/main/res/layout/cardviewshoppinglist.xml b/app/src/main/res/layout/cardviewshoppinglist.xml index f030867..340e3d3 100644 --- a/app/src/main/res/layout/cardviewshoppinglist.xml +++ b/app/src/main/res/layout/cardviewshoppinglist.xml @@ -16,18 +16,34 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + card_view:layout_constraintStart_toStartOf="@+id/guideline4" + card_view:layout_constraintTop_toTopOf="parent" + card_view:layout_constraintVertical_bias="0.436"> + card_view:layout_constraintGuide_begin="111dp" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8b9f805..3c8f3a3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,4 +3,5 @@ Dash ShoppinglistDetail ShoppinglistDetails + ItemListActivity