From 0a5484dd6c96573636cc8e2e31aa333d2ef5e611 Mon Sep 17 00:00:00 2001 From: shembull <46959681+shembull@users.noreply.github.com> Date: Sun, 19 Jan 2020 11:58:57 +0100 Subject: [PATCH] implenented left and right layout --- .idea/codeStyles/Project.xml | 1 - .idea/gradle.xml | 12 +++-- .idea/jarRepositories.xml | 25 +++++++++ .idea/misc.xml | 5 +- .../example/recyclerview/MainActivity.java | 26 ++++++++- .../com/example/recyclerview/MyAdapter.java | 53 ++++++++++++++----- ...yViewHolder.java => MyViewHolderLeft.java} | 8 +-- .../recyclerview/MyViewHolderRight.java | 15 ++++++ ...age_layout.xml => message_layout_left.xml} | 8 ++- .../main/res/layout/message_layout_right.xml | 30 +++++++++++ build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 12 files changed, 160 insertions(+), 29 deletions(-) create mode 100644 .idea/jarRepositories.xml rename app/src/main/java/com/example/recyclerview/{MyViewHolder.java => MyViewHolderLeft.java} (52%) create mode 100644 app/src/main/java/com/example/recyclerview/MyViewHolderRight.java rename app/src/main/res/layout/{message_layout.xml => message_layout_left.xml} (74%) create mode 100644 app/src/main/res/layout/message_layout_right.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 681f41a..264b222 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -94,7 +94,6 @@ http://schemas.android.com/apk/res/android - ANDROID_ATTRIBUTE_ORDER
diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d291b3d..5cd135a 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,15 +1,19 @@ + diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 37a7509..9442b9c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,8 +1,9 @@ - - + + + diff --git a/app/src/main/java/com/example/recyclerview/MainActivity.java b/app/src/main/java/com/example/recyclerview/MainActivity.java index 6692d53..ae9bb68 100644 --- a/app/src/main/java/com/example/recyclerview/MainActivity.java +++ b/app/src/main/java/com/example/recyclerview/MainActivity.java @@ -5,13 +5,16 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; +import android.os.Handler; import java.util.ArrayList; import java.util.Date; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements Runnable { ArrayList mData; + Handler mHandler; + MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -21,10 +24,29 @@ public class MainActivity extends AppCompatActivity { mData.add(new Message("Joel", "Eine super Nachricht", new Date())); mData.add(new Message("Max", "Eine Nachricht", new Date())); - MyAdapter myAdapter = new MyAdapter(mData); + myAdapter = new MyAdapter(mData); RecyclerView mRecyclerView = findViewById(R.id.recyclerView); LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLinearLayoutManager); mRecyclerView.setAdapter(myAdapter); + mHandler = new Handler(); + mHandler.postDelayed(this, 1000); + } + + @Override + public void run() { + int randNr = (int) Math.floor(Math.random() * 3); + switch (randNr){ + case 0: + mData.add(new Message("Niklas", "Eine super duper Nachricht", new Date())); + break; + case 1: + mData.add(new Message("Joel", "Eine super Nachricht", new Date())); + break; + case 2: + mData.add(new Message("Max", "Eine Nachricht", new Date())); + } + myAdapter.notifyDataSetChanged(); + mHandler.postDelayed(this, 1000); } } diff --git a/app/src/main/java/com/example/recyclerview/MyAdapter.java b/app/src/main/java/com/example/recyclerview/MyAdapter.java index cf55e99..3b3ef26 100644 --- a/app/src/main/java/com/example/recyclerview/MyAdapter.java +++ b/app/src/main/java/com/example/recyclerview/MyAdapter.java @@ -1,5 +1,6 @@ package com.example.recyclerview; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -10,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; -public class MyAdapter extends RecyclerView.Adapter { +public class MyAdapter extends RecyclerView.Adapter { ArrayList mData; @@ -18,23 +19,51 @@ public class MyAdapter extends RecyclerView.Adapter { mData = aData; } + @Override + public int getItemViewType(int position) { + return position % 2; + } + @NonNull @Override - public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); - View newView = inflater.inflate(R.layout.message_layout, parent, false); - MyViewHolder myViewHolder = new MyViewHolder(newView); - return myViewHolder; + switch (viewType) { + case 1: + View newViewRight = inflater.inflate(R.layout.message_layout_right, parent, false); + return new MyViewHolderRight(newViewRight); + case 0: + default: + View newViewLeft = inflater.inflate(R.layout.message_layout_left, parent, false); + return new MyViewHolderLeft(newViewLeft); + } } @Override - public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { - TextView sender = holder.mTextView.findViewById(R.id.sender_tv); - sender.setText(mData.get(position).sender); - TextView text = holder.mTextView.findViewById(R.id.text_tv); - text.setText(mData.get(position).text); - TextView date = holder.mTextView.findViewById(R.id.date_tv); - date.setText(mData.get(position).date.toString()); + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + TextView sender; + TextView text; + TextView date; + switch (holder.getItemViewType()) { + case 1: + MyViewHolderRight viewHolderRight = (MyViewHolderRight) holder; + sender = viewHolderRight.mLinearLayout.findViewById(R.id.sender_tv); + text = viewHolderRight.mLinearLayout.findViewById(R.id.text_tv); + date = viewHolderRight.mLinearLayout.findViewById(R.id.date_tv); + sender.setText(mData.get(position).sender); + text.setText(mData.get(position).text); + date.setText(mData.get(position).date.toString()); + break; + case 0: + default: + MyViewHolderLeft viewHolderLeft = (MyViewHolderLeft) holder; + sender = viewHolderLeft.mLinearLayout.findViewById(R.id.sender_tv); + text = viewHolderLeft.mLinearLayout.findViewById(R.id.text_tv); + date = viewHolderLeft.mLinearLayout.findViewById(R.id.date_tv); + sender.setText(mData.get(position).sender); + text.setText(mData.get(position).text); + date.setText(mData.get(position).date.toString()); + } } @Override diff --git a/app/src/main/java/com/example/recyclerview/MyViewHolder.java b/app/src/main/java/com/example/recyclerview/MyViewHolderLeft.java similarity index 52% rename from app/src/main/java/com/example/recyclerview/MyViewHolder.java rename to app/src/main/java/com/example/recyclerview/MyViewHolderLeft.java index 9d9e1b4..0d0442a 100644 --- a/app/src/main/java/com/example/recyclerview/MyViewHolder.java +++ b/app/src/main/java/com/example/recyclerview/MyViewHolderLeft.java @@ -6,10 +6,10 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -public class MyViewHolder extends RecyclerView.ViewHolder { - LinearLayout mTextView; - public MyViewHolder(@NonNull View itemView) { +public class MyViewHolderLeft extends RecyclerView.ViewHolder { + LinearLayout mLinearLayout; + public MyViewHolderLeft(@NonNull View itemView) { super(itemView); - mTextView = (LinearLayout) itemView; + mLinearLayout = (LinearLayout) itemView; } } diff --git a/app/src/main/java/com/example/recyclerview/MyViewHolderRight.java b/app/src/main/java/com/example/recyclerview/MyViewHolderRight.java new file mode 100644 index 0000000..f6e2748 --- /dev/null +++ b/app/src/main/java/com/example/recyclerview/MyViewHolderRight.java @@ -0,0 +1,15 @@ +package com.example.recyclerview; + +import android.view.View; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +public class MyViewHolderRight extends RecyclerView.ViewHolder { + LinearLayout mLinearLayout; + public MyViewHolderRight(@NonNull View itemView) { + super(itemView); + mLinearLayout = (LinearLayout) itemView; + } +} diff --git a/app/src/main/res/layout/message_layout.xml b/app/src/main/res/layout/message_layout_left.xml similarity index 74% rename from app/src/main/res/layout/message_layout.xml rename to app/src/main/res/layout/message_layout_left.xml index 23f8cf8..b6f9b6a 100644 --- a/app/src/main/res/layout/message_layout.xml +++ b/app/src/main/res/layout/message_layout_left.xml @@ -1,14 +1,20 @@ + android:text="TextView" + android:textSize="18sp" + android:textStyle="bold" + android:typeface="normal" /> + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index fb516be..42fadac 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.2' + classpath 'com.android.tools.build:gradle:4.0.0-alpha08' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c4a644c..6ed35c2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Jan 14 16:39:03 CET 2020 +#Sun Jan 19 10:43:18 CET 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-rc-1-all.zip