回答編集履歴

2

コード修正

2022/03/21 11:53

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -13,7 +13,7 @@
13
13
  protected void onCreate(Bundle savedInstanceState) {
14
14
  //略
15
15
  adapter = new RecyclerViewAdapter(noteManager.getNoteItems());
16
- adapter.setOnDeleteListener(view -> {
16
+ adapter.setDeleteListener((view, position) -> {
17
17
  DialogFragmentCheckingDelete dialogFragment = new DialogFragmentCheckingDelete();
18
18
  dialogFragment.show(getSupportFragmentManager(), "DialogFragmentCheckingDelete");
19
19
  });
@@ -25,8 +25,12 @@
25
25
  ```java
26
26
  public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerListViewHolder> {
27
27
  //略
28
+ interface DeleteListener {
29
+ void onDelete(View view, int position);
30
+ }
31
+
28
- private View.OnClickListener deleteListener;
32
+ private DeleteListener deleteListener;
29
- void setOnDeleteListener(View.OnClickListener deleteListener) {
33
+ void setDeleteListener(DeleteListener deleteListener) {
30
34
  this.deleteListener = deleteListener;
31
35
  }
32
36
 
@@ -34,7 +38,23 @@
34
38
  public void onBindViewHolder(@NonNull RecyclerListViewHolder holder, int position) {
35
39
  holder._tvTitle.setText(titles.get(position));
36
40
  holder._tvText.setText(texts.get(position));
41
+ holder._iBtnDeleteL.setTag(position);
42
+ }
43
+
44
+ public class RecyclerListViewHolder extends RecyclerView.ViewHolder {
45
+ final TextView _tvTitle;
46
+ final TextView _tvText;
47
+ final Button _iBtnDeleteL;
48
+
49
+ public NoteViewHolder(View itemView) {
50
+ super(itemView);
51
+ _tvTitle= itemView.findViewById(R.id.tvNoteTitle);
52
+ _tvText= itemView.findViewById(R.id.tvNoteText);
53
+ _iBtnDeleteL= itemView.findViewById(R.id.dtnDelete);
37
- holder._iBtnDeleteL.setOnClickListener(deleteListener);
54
+ _iBtnDeleteL.setOnClickListener(view -> {
55
+ if(deleteListener != null) deleteListener.onDelete(view, (int)_iBtnDeleteL.getTag());
56
+ });
57
+ }
38
58
  }
39
59
  //略
40
60
  ```

1

コード追加

2022/03/21 09:28

投稿

jimbe
jimbe

スコア12659

test CHANGED
@@ -6,3 +6,35 @@
6
6
  ついでに、フラグメントマネージャはアクティビティ毎(ついでにフラグメント毎にも)にありますので、どのアクティビティ(もしくはフラグメント)でも良いという訳にもいきません。
7
7
 
8
8
  ご質問のコードの場合は、Adapter 内でクリック時の処理を行うよりも、アクティビティにクリックされたことを伝えて後の処理を任せるほうが Adapter の役割としては適当に思います。
9
+
10
+ ```java
11
+ public class MainActivity extends AppCompatActivity {
12
+ @Override
13
+ protected void onCreate(Bundle savedInstanceState) {
14
+ //略
15
+ adapter = new RecyclerViewAdapter(noteManager.getNoteItems());
16
+ adapter.setOnDeleteListener(view -> {
17
+ DialogFragmentCheckingDelete dialogFragment = new DialogFragmentCheckingDelete();
18
+ dialogFragment.show(getSupportFragmentManager(), "DialogFragmentCheckingDelete");
19
+ });
20
+ rvNote.setAdapter(adapter);
21
+ //略
22
+ }
23
+ }
24
+ ```
25
+ ```java
26
+ public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerListViewHolder> {
27
+ //略
28
+ private View.OnClickListener deleteListener;
29
+ void setOnDeleteListener(View.OnClickListener deleteListener) {
30
+ this.deleteListener = deleteListener;
31
+ }
32
+
33
+ @Override
34
+ public void onBindViewHolder(@NonNull RecyclerListViewHolder holder, int position) {
35
+ holder._tvTitle.setText(titles.get(position));
36
+ holder._tvText.setText(texts.get(position));
37
+ holder._iBtnDeleteL.setOnClickListener(deleteListener);
38
+ }
39
+ //略
40
+ ```