This is a similar contents of “Android RecyclerView“(kotlin). In this time, realize same function as Java
build.gradle
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta04'
Coding Flow
- Prepare row (item) layout
- Prepare Activity layout
- Prepare data class
- Prepare Adapter
- Add adapter to Activity
Flow is same as ListView
recyclerview_row.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto"> <ImageView android:id="@+id/mainicon" android:layout_width="60dp" android:layout_height="60dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:src="@drawable/nogizaka" android:scaleType="fitCenter"/> <TextView android:id="@+id/mainname" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_marginStart="8dp" app:layout_constraintStart_toEndOf="@id/mainicon" app:layout_constraintTop_toTopOf="@id/mainicon" /> <TextView android:id="@+id/maindate" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_marginStart="8dp" android:layout_marginTop="3dp" android:textSize="12sp" app:layout_constraintStart_toEndOf="@id/mainname" app:layout_constraintTop_toTopOf="@id/mainname" /> <TextView android:id="@+id/content" android:layout_width="300dp" android:layout_height="0dp" android:layout_below="@+id/mainname" android:layout_marginStart="8dp" android:layout_marginTop="4dp" android:textStyle="bold" app:layout_constraintStart_toEndOf="@id/mainicon" app:layout_constraintTop_toBottomOf="@id/mainname" /> </androidx.constraintlayout.widget.ConstraintLayout>
activity_recyclerview.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/listView" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> </androidx.recyclerview.widget.RecyclerView> </androidx.constraintlayout.widget.ConstraintLayout>
RecyclerData.java
@Data public class RecyclerData { private String content; private String date; private String name; public RecyclerData(String content, String date, String name) { this.content = content; this.date = date; this.name = name; } }
I use lombok for getter/setter, if you have interest in lombok, please check my other entry(Android getter/setter lombok).
RecyclerDataAdapter.java
public class RecyclerDataAdapter extends RecyclerView.Adapter<RecyclerDataAdapter.RecyclerDataHolder> { private List<RecyclerData> list; private Context context; class RecyclerDataHolder extends RecyclerView.ViewHolder { ImageView iconView; TextView nameTextView; TextView dateTextView; TextView contentTextView; public RecyclerDataHolder(View view) { super(view); this.iconView = view.findViewById(R.id.mainicon); this.nameTextView = view.findViewById(R.id.mainname); this.dateTextView = view.findViewById(R.id.maindate); this.contentTextView = view.findViewById(R.id.content); } } public RecyclerDataAdapter(Context context, List<RecyclerData> list) { super(); this.list = list; this.context = context; } @NonNull @Override public RecyclerDataHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new RecyclerDataHolder(LayoutInflater.from(context).inflate(R.layout.recyclerview_row, parent, false)); } @Override public int getItemCount() { return list.size(); } @Override public void onBindViewHolder(@NonNull RecyclerDataHolder holder, int position) { holder.iconView.setImageResource(R.drawable.nogizaka); holder.nameTextView.setText(list.get(position).getName()); holder.dateTextView.setText(list.get(position).getDate()); holder.contentTextView.setText(list.get(position).getContent()); } }
RecyclerViewActivity.java
public class RecyclerViewActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recyclerview); RecyclerData recyclerData = new RecyclerData("Tsundere", "2019/12/25", "Saito, Asuka"); recyclerData.getContent(); recyclerData.getDate(); recyclerData.getName(); List<RecyclerData> list = new ArrayList<>(); list.add(recyclerData); list.add(new RecyclerData("Kawaii", "2019/12/31", "Hori, Miona")); RecyclerDataAdapter recyclerDataAdapter = new RecyclerDataAdapter(this, list); RecyclerView recyclerView = findViewById(R.id.listView); recyclerView.setAdapter(recyclerDataAdapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerDataAdapter.notifyDataSetChanged(); } }
コメント