質問編集履歴
4
不要な情報の削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -198,8 +198,4 @@
|
|
198
198
|
Registry: external.system.auto.import.disabled=true
|
199
199
|
Non-Bundled Plugins: dev.polek.adbwifi (1.2.4), org.jetbrains.kotlin (211-1.6.10-release-923-AS7442.40)
|
200
200
|
|
201
|
-
|
201
|
+
|
202
|
-
AQUOS sense3(SH-02M)
|
203
|
-
Android バージョン: 11
|
204
|
-
|
205
|
-
|
3
書式の改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,152 +1,11 @@
|
|
1
|
+
### 前提・実現したいこと
|
2
|
+
|
1
3
|
Android StudioでJavaを使ってメモ帳アプリを作っています。メモのデータをSQLiteで保存し、それをRecyclerViewを使って表示する仕様です。メモデータを追加したときにRecyclerViewを更新する必要があるのですが、そこでエラーが出てしまいます。
|
2
4
|
|
3
5
|
具体的に言うと、ダイアログの保存ボタンを押したときの処理(.setPositiveButton/onCreateDialog/CreatesNotesDialogFragment.javaの第二引数内)でMainActivity.javaのnotifyAboutrecyclerViewメソッドを呼び出し、そのメソッド中でnotifyItemInsertedを使って更新処理をしています。notifiItemInsertedメソッドを実行しているadapterがnullになっているのがエラーの原因だと思うのですが、MainActivityのonCreate内でadapterインスタンスの生成を行っているのでなぜnullなのか良く分かりません。もしわかる方がいらっしゃれば、ご教授いただければ幸いです。
|
4
6
|
|
5
|
-
以下ソースコードとエラー文です。
|
6
|
-
|
7
|
-
```MainActivity.java
|
8
|
-
import android.database.Cursor;
|
9
|
-
import android.os.Bundle;
|
10
|
-
import android.view.LayoutInflater;
|
11
|
-
import android.view.View;
|
12
|
-
import android.view.ViewGroup;
|
13
|
-
import android.widget.TextView;
|
14
|
-
|
15
|
-
import androidx.annotation.NonNull;
|
16
|
-
import androidx.appcompat.app.AppCompatActivity;
|
17
|
-
import androidx.recyclerview.widget.LinearLayoutManager;
|
18
|
-
import androidx.recyclerview.widget.RecyclerView;
|
19
|
-
|
20
|
-
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
21
|
-
|
22
|
-
import java.util.ArrayList;
|
23
|
-
|
24
|
-
public class MainActivity extends AppCompatActivity {
|
25
|
-
private DatabaseHelper _helper;
|
26
|
-
private RecyclerViewAdapter adapter;
|
27
|
-
private int listSize;
|
28
|
-
|
29
|
-
@Override
|
30
|
-
protected void onCreate(Bundle savedInstanceState) {
|
31
|
-
super.onCreate(savedInstanceState);
|
32
|
-
setContentView(R.layout.activity_main);
|
33
|
-
|
34
|
-
//DatabaseHelperの生成処理。
|
35
|
-
_helper = new DatabaseHelper(MainActivity.this);
|
36
|
-
|
37
|
-
//RecyclerViewの設定。
|
38
|
-
RecyclerView rvNote = findViewById(R.id.rvNote);
|
39
|
-
rvNote.setLayoutManager(new LinearLayoutManager(MainActivity.this));
|
40
|
-
ArrayList<String> title = new ArrayList<>();
|
41
|
-
ArrayList<String> text = new ArrayList<>();
|
42
|
-
Cursor cursor = _helper.readData();
|
43
|
-
while (cursor.moveToNext()) {
|
44
|
-
title.add(cursor.getString(1));
|
45
|
-
text.add(cursor.getString(2));
|
46
|
-
}
|
47
|
-
adapter = new RecyclerViewAdapter(title, text);
|
48
|
-
rvNote.setAdapter(adapter);
|
49
|
-
|
50
|
-
//fabAddを押したときの処理。
|
51
|
-
FloatingActionButton fabAdd = findViewById(R.id.fabAdd);
|
52
|
-
fabAdd.setOnClickListener(view -> {
|
53
|
-
CreatesNotesDialogFragment fragment = new CreatesNotesDialogFragment();
|
54
|
-
fragment.show(getSupportFragmentManager(),"CreatesNotesDialogFragment");
|
55
|
-
});
|
56
|
-
}
|
57
|
-
|
58
|
-
@Override
|
59
|
-
protected void onDestroy() {
|
60
|
-
_helper.close();
|
61
|
-
super.onDestroy();
|
62
|
-
}
|
63
|
-
|
64
|
-
//エラー文に記載されている箇所。
|
65
|
-
public void notifyAboutRecyclerView(){
|
66
|
-
adapter.notifyItemInserted(listSize);
|
67
|
-
}
|
68
|
-
|
69
|
-
//RecyclerViewのアダプタ。
|
70
|
-
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerListViewHolder> {
|
71
|
-
private final ArrayList<String> title;
|
72
|
-
private final ArrayList<String> text;
|
73
|
-
|
74
|
-
public RecyclerViewAdapter(ArrayList<String> title, ArrayList<String> text) {
|
75
|
-
this.title = title;
|
76
|
-
this.text = text;
|
77
|
-
}
|
78
|
-
|
79
|
-
@NonNull
|
80
|
-
@Override
|
81
|
-
public RecyclerListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
82
|
-
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
|
83
|
-
View view = inflater.inflate(R.layout.note_list_layout, parent, false);
|
84
|
-
return new RecyclerListViewHolder(view);
|
85
|
-
}
|
86
|
-
|
87
|
-
@Override
|
88
|
-
public void onBindViewHolder(RecyclerListViewHolder holder, int position) {
|
89
|
-
holder._tvNoteTitle.setText(String.valueOf(title.get(position)));
|
90
|
-
holder._tvNoteText.setText(String.valueOf(text.get(position)));
|
91
|
-
}
|
92
|
-
|
93
|
-
@Override
|
94
|
-
public int getItemCount() {
|
95
|
-
listSize = text.size();
|
96
|
-
return listSize;
|
97
|
-
}
|
98
|
-
|
99
|
-
public class RecyclerListViewHolder extends RecyclerView.ViewHolder {
|
100
|
-
public TextView _tvNoteTitle;
|
101
|
-
public TextView _tvNoteText;
|
102
|
-
|
103
|
-
public RecyclerListViewHolder(View itemView) {
|
104
|
-
super(itemView);
|
105
|
-
_tvNoteTitle = itemView.findViewById(R.id.tvNoteTitle);
|
106
|
-
_tvNoteText = itemView.findViewById(R.id.tvNoteText);
|
107
|
-
}
|
108
|
-
}
|
109
|
-
}
|
110
|
-
}
|
111
|
-
```
|
112
|
-
|
113
|
-
```CreatesNotesDialogFragment.java
|
114
|
-
import android.app.AlertDialog;
|
115
|
-
//エラー文に記載されている箇所。
|
116
|
-
import android.app.Dialog;
|
117
|
-
import android.os.Bundle;
|
118
|
-
import android.view.LayoutInflater;
|
119
|
-
import android.view.View;
|
120
|
-
import android.widget.EditText;
|
121
|
-
|
122
|
-
import androidx.annotation.NonNull;
|
123
|
-
import androidx.fragment.app.DialogFragment;
|
124
|
-
|
125
|
-
public class CreatesNotesDialogFragment extends DialogFragment {
|
126
|
-
|
127
|
-
@NonNull
|
128
|
-
@Override
|
129
|
-
public Dialog onCreateDialog(Bundle savedInstance) {
|
130
|
-
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
131
|
-
LayoutInflater inflater = requireActivity().getLayoutInflater();
|
132
|
-
View customView = inflater.inflate(R.layout.dialog_layout, null);
|
133
|
-
builder.setView(customView)
|
134
|
-
.setPositiveButton(R.string.btn_keep, (dialogInterface, i) -> {
|
135
|
-
EditText etNoteTitle = customView.findViewById(R.id.etSetNoteTitle);
|
136
|
-
String noteTitle = etNoteTitle.getText().toString();
|
137
|
-
EditText etNoteText = customView.findViewById(R.id.etSetNoteText);
|
138
|
-
String noteText = etNoteText.getText().toString();
|
139
|
-
new DatabaseHelper(getContext()).addData(noteTitle, noteText);
|
140
|
-
//エラー文に記載されている箇所。
|
141
|
-
new MainActivity().notifyAboutRecyclerView();
|
142
|
-
})
|
143
|
-
.setNegativeButton(R.string.btn_cxl, (dialogInterface, i) -> {
|
144
|
-
});
|
145
|
-
return builder.create();
|
146
|
-
}
|
147
|
-
}
|
148
|
-
```
|
149
|
-
エラー
|
7
|
+
### エラーメッセージ(コメントに該当箇所を記載しておきます)
|
8
|
+
|
150
9
|
```
|
151
10
|
E/AndroidRuntime: FATAL EXCEPTION: main
|
152
11
|
Process: jp.halo_sf.haloint, PID: 18663
|
@@ -175,3 +34,172 @@
|
|
175
34
|
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
|
176
35
|
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:979)
|
177
36
|
```
|
37
|
+
|
38
|
+
### 該当のソースコード
|
39
|
+
|
40
|
+
```MainActivity.java
|
41
|
+
import android.database.Cursor;
|
42
|
+
import android.os.Bundle;
|
43
|
+
import android.view.LayoutInflater;
|
44
|
+
import android.view.View;
|
45
|
+
import android.view.ViewGroup;
|
46
|
+
import android.widget.TextView;
|
47
|
+
|
48
|
+
import androidx.annotation.NonNull;
|
49
|
+
import androidx.appcompat.app.AppCompatActivity;
|
50
|
+
import androidx.recyclerview.widget.LinearLayoutManager;
|
51
|
+
import androidx.recyclerview.widget.RecyclerView;
|
52
|
+
|
53
|
+
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
54
|
+
|
55
|
+
import java.util.ArrayList;
|
56
|
+
|
57
|
+
public class MainActivity extends AppCompatActivity {
|
58
|
+
private DatabaseHelper _helper;
|
59
|
+
private RecyclerViewAdapter adapter;
|
60
|
+
private int listSize;
|
61
|
+
|
62
|
+
@Override
|
63
|
+
protected void onCreate(Bundle savedInstanceState) {
|
64
|
+
super.onCreate(savedInstanceState);
|
65
|
+
setContentView(R.layout.activity_main);
|
66
|
+
|
67
|
+
//DatabaseHelperの生成処理。
|
68
|
+
_helper = new DatabaseHelper(MainActivity.this);
|
69
|
+
|
70
|
+
//RecyclerViewの設定。
|
71
|
+
RecyclerView rvNote = findViewById(R.id.rvNote);
|
72
|
+
rvNote.setLayoutManager(new LinearLayoutManager(MainActivity.this));
|
73
|
+
ArrayList<String> title = new ArrayList<>();
|
74
|
+
ArrayList<String> text = new ArrayList<>();
|
75
|
+
Cursor cursor = _helper.readData();
|
76
|
+
while (cursor.moveToNext()) {
|
77
|
+
title.add(cursor.getString(1));
|
78
|
+
text.add(cursor.getString(2));
|
79
|
+
}
|
80
|
+
adapter = new RecyclerViewAdapter(title, text);
|
81
|
+
rvNote.setAdapter(adapter);
|
82
|
+
|
83
|
+
//fabAddを押したときの処理。
|
84
|
+
FloatingActionButton fabAdd = findViewById(R.id.fabAdd);
|
85
|
+
fabAdd.setOnClickListener(view -> {
|
86
|
+
CreatesNotesDialogFragment fragment = new CreatesNotesDialogFragment();
|
87
|
+
fragment.show(getSupportFragmentManager(),"CreatesNotesDialogFragment");
|
88
|
+
});
|
89
|
+
}
|
90
|
+
|
91
|
+
@Override
|
92
|
+
protected void onDestroy() {
|
93
|
+
_helper.close();
|
94
|
+
super.onDestroy();
|
95
|
+
}
|
96
|
+
|
97
|
+
//エラー文に記載されている箇所。
|
98
|
+
public void notifyAboutRecyclerView(){
|
99
|
+
adapter.notifyItemInserted(listSize);
|
100
|
+
}
|
101
|
+
|
102
|
+
//RecyclerViewのアダプタ。
|
103
|
+
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerListViewHolder> {
|
104
|
+
private final ArrayList<String> title;
|
105
|
+
private final ArrayList<String> text;
|
106
|
+
|
107
|
+
public RecyclerViewAdapter(ArrayList<String> title, ArrayList<String> text) {
|
108
|
+
this.title = title;
|
109
|
+
this.text = text;
|
110
|
+
}
|
111
|
+
|
112
|
+
@NonNull
|
113
|
+
@Override
|
114
|
+
public RecyclerListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
115
|
+
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
|
116
|
+
View view = inflater.inflate(R.layout.note_list_layout, parent, false);
|
117
|
+
return new RecyclerListViewHolder(view);
|
118
|
+
}
|
119
|
+
|
120
|
+
@Override
|
121
|
+
public void onBindViewHolder(RecyclerListViewHolder holder, int position) {
|
122
|
+
holder._tvNoteTitle.setText(String.valueOf(title.get(position)));
|
123
|
+
holder._tvNoteText.setText(String.valueOf(text.get(position)));
|
124
|
+
}
|
125
|
+
|
126
|
+
@Override
|
127
|
+
public int getItemCount() {
|
128
|
+
listSize = text.size();
|
129
|
+
return listSize;
|
130
|
+
}
|
131
|
+
|
132
|
+
public class RecyclerListViewHolder extends RecyclerView.ViewHolder {
|
133
|
+
public TextView _tvNoteTitle;
|
134
|
+
public TextView _tvNoteText;
|
135
|
+
|
136
|
+
public RecyclerListViewHolder(View itemView) {
|
137
|
+
super(itemView);
|
138
|
+
_tvNoteTitle = itemView.findViewById(R.id.tvNoteTitle);
|
139
|
+
_tvNoteText = itemView.findViewById(R.id.tvNoteText);
|
140
|
+
}
|
141
|
+
}
|
142
|
+
}
|
143
|
+
}
|
144
|
+
```
|
145
|
+
|
146
|
+
```CreatesNotesDialogFragment.java
|
147
|
+
import android.app.AlertDialog;
|
148
|
+
//エラー文に記載されている箇所。
|
149
|
+
import android.app.Dialog;
|
150
|
+
import android.os.Bundle;
|
151
|
+
import android.view.LayoutInflater;
|
152
|
+
import android.view.View;
|
153
|
+
import android.widget.EditText;
|
154
|
+
|
155
|
+
import androidx.annotation.NonNull;
|
156
|
+
import androidx.fragment.app.DialogFragment;
|
157
|
+
|
158
|
+
public class CreatesNotesDialogFragment extends DialogFragment {
|
159
|
+
|
160
|
+
@NonNull
|
161
|
+
@Override
|
162
|
+
public Dialog onCreateDialog(Bundle savedInstance) {
|
163
|
+
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
164
|
+
LayoutInflater inflater = requireActivity().getLayoutInflater();
|
165
|
+
View customView = inflater.inflate(R.layout.dialog_layout, null);
|
166
|
+
builder.setView(customView)
|
167
|
+
.setPositiveButton(R.string.btn_keep, (dialogInterface, i) -> {
|
168
|
+
EditText etNoteTitle = customView.findViewById(R.id.etSetNoteTitle);
|
169
|
+
String noteTitle = etNoteTitle.getText().toString();
|
170
|
+
EditText etNoteText = customView.findViewById(R.id.etSetNoteText);
|
171
|
+
String noteText = etNoteText.getText().toString();
|
172
|
+
new DatabaseHelper(getContext()).addData(noteTitle, noteText);
|
173
|
+
//エラー文に記載されている箇所。
|
174
|
+
new MainActivity().notifyAboutRecyclerView();
|
175
|
+
})
|
176
|
+
.setNegativeButton(R.string.btn_cxl, (dialogInterface, i) -> {
|
177
|
+
});
|
178
|
+
return builder.create();
|
179
|
+
}
|
180
|
+
}
|
181
|
+
```
|
182
|
+
|
183
|
+
### 試したこと
|
184
|
+
|
185
|
+
原因が全く分からないため特にありません。インターネットでいろいろ調べてみましたが思うような答えが得られなかったので質問しました。
|
186
|
+
|
187
|
+
### 補足情報
|
188
|
+
|
189
|
+
使用ツールの環境
|
190
|
+
Android Studio Bumblebee | 2021.1.1 Patch 2
|
191
|
+
Build #AI-211.7628.21.2111.8193401, built on February 17, 2022
|
192
|
+
ランタイム・バージョン: 11.0.11+9-b60-7590822 amd64
|
193
|
+
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
|
194
|
+
Windows 10 10.0
|
195
|
+
GC: G1 Young Generation, G1 Old Generation
|
196
|
+
Memory: 1280M
|
197
|
+
Cores: 8
|
198
|
+
Registry: external.system.auto.import.disabled=true
|
199
|
+
Non-Bundled Plugins: dev.polek.adbwifi (1.2.4), org.jetbrains.kotlin (211-1.6.10-release-923-AS7442.40)
|
200
|
+
|
201
|
+
実行デバイス
|
202
|
+
AQUOS sense3(SH-02M)
|
203
|
+
Android バージョン: 11
|
204
|
+
|
205
|
+
|
2
ソースコードの可読性を改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
Android StudioでJavaを使ってメモ帳アプリを作っています。メモのデータをSQLiteで保存し、それをRecyclerViewを使って表示する仕様です。メモデータを追加したときにRecyclerViewを更新する必要があるのですが、そこでエラーが出てしまいます。
|
1
|
+
Android StudioでJavaを使ってメモ帳アプリを作っています。メモのデータをSQLiteで保存し、それをRecyclerViewを使って表示する仕様です。メモデータを追加したときにRecyclerViewを更新する必要があるのですが、そこでエラーが出てしまいます。
|
2
|
+
|
3
|
+
具体的に言うと、ダイアログの保存ボタンを押したときの処理(.setPositiveButton/onCreateDialog/CreatesNotesDialogFragment.javaの第二引数内)でMainActivity.javaのnotifyAboutrecyclerViewメソッドを呼び出し、そのメソッド中でnotifyItemInsertedを使って更新処理をしています。notifiItemInsertedメソッドを実行しているadapterがnullになっているのがエラーの原因だと思うのですが、MainActivityのonCreate内でadapterインスタンスの生成を行っているのでなぜnullなのか良く分かりません。もしわかる方がいらっしゃれば、ご教授いただければ幸いです。
|
4
|
+
|
5
|
+
以下ソースコードとエラー文です。
|
2
6
|
|
3
7
|
```MainActivity.java
|
4
8
|
import android.database.Cursor;
|
@@ -57,7 +61,7 @@
|
|
57
61
|
super.onDestroy();
|
58
62
|
}
|
59
63
|
|
60
|
-
//エラー
|
64
|
+
//エラー文に記載されている箇所。
|
61
65
|
public void notifyAboutRecyclerView(){
|
62
66
|
adapter.notifyItemInserted(listSize);
|
63
67
|
}
|
@@ -108,6 +112,7 @@
|
|
108
112
|
|
109
113
|
```CreatesNotesDialogFragment.java
|
110
114
|
import android.app.AlertDialog;
|
115
|
+
//エラー文に記載されている箇所。
|
111
116
|
import android.app.Dialog;
|
112
117
|
import android.os.Bundle;
|
113
118
|
import android.view.LayoutInflater;
|
@@ -132,6 +137,7 @@
|
|
132
137
|
EditText etNoteText = customView.findViewById(R.id.etSetNoteText);
|
133
138
|
String noteText = etNoteText.getText().toString();
|
134
139
|
new DatabaseHelper(getContext()).addData(noteTitle, noteText);
|
140
|
+
//エラー文に記載されている箇所。
|
135
141
|
new MainActivity().notifyAboutRecyclerView();
|
136
142
|
})
|
137
143
|
.setNegativeButton(R.string.btn_cxl, (dialogInterface, i) -> {
|
@@ -140,14 +146,27 @@
|
|
140
146
|
}
|
141
147
|
}
|
142
148
|
```
|
143
|
-
エラー文
|
149
|
+
エラー文(コメントに該当箇所を記載しておきます)
|
144
150
|
```
|
145
151
|
E/AndroidRuntime: FATAL EXCEPTION: main
|
146
152
|
Process: jp.halo_sf.haloint, PID: 18663
|
147
153
|
java.lang.NullPointerException: Attempt to invoke virtual method 'void jp.halo_sf.haloint.MainActivity$RecyclerViewAdapter.notifyItemInserted(int)' on a null object reference
|
148
154
|
at jp.halo_sf.haloint.MainActivity.notifyAboutRecyclerView(MainActivity.java:61)
|
155
|
+
//public class MainActivity extends AppCompatActivity {
|
156
|
+
public void notifyAboutRecyclerView(){
|
157
|
+
adapter.notifyItemInserted(listSize);
|
158
|
+
}
|
159
|
+
} のところです。
|
149
160
|
at jp.halo_sf.haloint.CreatesNotesDialogFragment.lambda$onCreateDialog$0$jp-halo_sf-haloint-CreatesNotesDialogFragment(CreatesNotesDialogFragment.java:28)
|
161
|
+
//public class CreatesNotesDialogFragment extends DialogFragment {
|
162
|
+
public Dialog onCreateDialog(Bundle savedInstance) {
|
163
|
+
builder.setPositiveButton(R.string.btn_keep, (dialogInterface, i) -> {
|
164
|
+
new MainActivity().notifyAboutRecyclerView();
|
165
|
+
})
|
166
|
+
}
|
167
|
+
} のところです。
|
150
168
|
at jp.halo_sf.haloint.CreatesNotesDialogFragment$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
|
169
|
+
//CreateNotesDialogFragment の import android.app.Dialog; のところです。
|
151
170
|
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174)
|
152
171
|
at android.os.Handler.dispatchMessage(Handler.java:106)
|
153
172
|
at android.os.Looper.loop(Looper.java:223)
|
1
記載するソースコードの変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
Android StudioでJavaを使ってメモ帳アプリを作っています。メモのデータをSQLiteで保存し、それをRecyclerViewを使って表示する仕様です。メモデータを追加したときにRecyclerViewを更新する必要があるのですが、そこでエラーが出てしまいます。
|
1
|
+
Android StudioでJavaを使ってメモ帳アプリを作っています。メモのデータをSQLiteで保存し、それをRecyclerViewを使って表示する仕様です。メモデータを追加したときにRecyclerViewを更新する必要があるのですが、そこでエラーが出てしまいます。具体的に言うと、ダイアログの保存ボタンを押したときの処理(.setPositiveButton/onCreateDialog/CreatesNotesDialogFragment.javaの第二引数内)でMainActivity.javaのnotifyAboutrecyclerViewメソッドを呼び出してその中でnotifyItemInsertedを使って更新処理をしています。以下ソースコードとエラー文です。
|
2
2
|
|
3
|
-
`java`
|
4
3
|
```MainActivity.java
|
5
|
-
//import文。
|
6
4
|
import android.database.Cursor;
|
7
5
|
import android.os.Bundle;
|
8
6
|
import android.view.LayoutInflater;
|
@@ -28,7 +26,29 @@
|
|
28
26
|
protected void onCreate(Bundle savedInstanceState) {
|
29
27
|
super.onCreate(savedInstanceState);
|
30
28
|
setContentView(R.layout.activity_main);
|
29
|
+
|
31
|
-
//DatabaseHelperの生成処理
|
30
|
+
//DatabaseHelperの生成処理。
|
31
|
+
_helper = new DatabaseHelper(MainActivity.this);
|
32
|
+
|
33
|
+
//RecyclerViewの設定。
|
34
|
+
RecyclerView rvNote = findViewById(R.id.rvNote);
|
35
|
+
rvNote.setLayoutManager(new LinearLayoutManager(MainActivity.this));
|
36
|
+
ArrayList<String> title = new ArrayList<>();
|
37
|
+
ArrayList<String> text = new ArrayList<>();
|
38
|
+
Cursor cursor = _helper.readData();
|
39
|
+
while (cursor.moveToNext()) {
|
40
|
+
title.add(cursor.getString(1));
|
41
|
+
text.add(cursor.getString(2));
|
42
|
+
}
|
43
|
+
adapter = new RecyclerViewAdapter(title, text);
|
44
|
+
rvNote.setAdapter(adapter);
|
45
|
+
|
46
|
+
//fabAddを押したときの処理。
|
47
|
+
FloatingActionButton fabAdd = findViewById(R.id.fabAdd);
|
48
|
+
fabAdd.setOnClickListener(view -> {
|
49
|
+
CreatesNotesDialogFragment fragment = new CreatesNotesDialogFragment();
|
50
|
+
fragment.show(getSupportFragmentManager(),"CreatesNotesDialogFragment");
|
51
|
+
});
|
32
52
|
}
|
33
53
|
|
34
54
|
@Override
|
@@ -37,7 +57,7 @@
|
|
37
57
|
super.onDestroy();
|
38
58
|
}
|
39
59
|
|
40
|
-
|
60
|
+
//エラーの出るところ。
|
41
61
|
public void notifyAboutRecyclerView(){
|
42
62
|
adapter.notifyItemInserted(listSize);
|
43
63
|
}
|
@@ -84,3 +104,55 @@
|
|
84
104
|
}
|
85
105
|
}
|
86
106
|
}
|
107
|
+
```
|
108
|
+
|
109
|
+
```CreatesNotesDialogFragment.java
|
110
|
+
import android.app.AlertDialog;
|
111
|
+
import android.app.Dialog;
|
112
|
+
import android.os.Bundle;
|
113
|
+
import android.view.LayoutInflater;
|
114
|
+
import android.view.View;
|
115
|
+
import android.widget.EditText;
|
116
|
+
|
117
|
+
import androidx.annotation.NonNull;
|
118
|
+
import androidx.fragment.app.DialogFragment;
|
119
|
+
|
120
|
+
public class CreatesNotesDialogFragment extends DialogFragment {
|
121
|
+
|
122
|
+
@NonNull
|
123
|
+
@Override
|
124
|
+
public Dialog onCreateDialog(Bundle savedInstance) {
|
125
|
+
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
126
|
+
LayoutInflater inflater = requireActivity().getLayoutInflater();
|
127
|
+
View customView = inflater.inflate(R.layout.dialog_layout, null);
|
128
|
+
builder.setView(customView)
|
129
|
+
.setPositiveButton(R.string.btn_keep, (dialogInterface, i) -> {
|
130
|
+
EditText etNoteTitle = customView.findViewById(R.id.etSetNoteTitle);
|
131
|
+
String noteTitle = etNoteTitle.getText().toString();
|
132
|
+
EditText etNoteText = customView.findViewById(R.id.etSetNoteText);
|
133
|
+
String noteText = etNoteText.getText().toString();
|
134
|
+
new DatabaseHelper(getContext()).addData(noteTitle, noteText);
|
135
|
+
new MainActivity().notifyAboutRecyclerView();
|
136
|
+
})
|
137
|
+
.setNegativeButton(R.string.btn_cxl, (dialogInterface, i) -> {
|
138
|
+
});
|
139
|
+
return builder.create();
|
140
|
+
}
|
141
|
+
}
|
142
|
+
```
|
143
|
+
エラー文
|
144
|
+
```
|
145
|
+
E/AndroidRuntime: FATAL EXCEPTION: main
|
146
|
+
Process: jp.halo_sf.haloint, PID: 18663
|
147
|
+
java.lang.NullPointerException: Attempt to invoke virtual method 'void jp.halo_sf.haloint.MainActivity$RecyclerViewAdapter.notifyItemInserted(int)' on a null object reference
|
148
|
+
at jp.halo_sf.haloint.MainActivity.notifyAboutRecyclerView(MainActivity.java:61)
|
149
|
+
at jp.halo_sf.haloint.CreatesNotesDialogFragment.lambda$onCreateDialog$0$jp-halo_sf-haloint-CreatesNotesDialogFragment(CreatesNotesDialogFragment.java:28)
|
150
|
+
at jp.halo_sf.haloint.CreatesNotesDialogFragment$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
|
151
|
+
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174)
|
152
|
+
at android.os.Handler.dispatchMessage(Handler.java:106)
|
153
|
+
at android.os.Looper.loop(Looper.java:223)
|
154
|
+
at android.app.ActivityThread.main(ActivityThread.java:8240)
|
155
|
+
at java.lang.reflect.Method.invoke(Native Method)
|
156
|
+
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
|
157
|
+
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:979)
|
158
|
+
```
|