実現したいこと
フラグメントの中にRecyclerViewを入れています。
そしてRecyclerViewとしてデータベースからとってきているレコードを
繰り返し表示したいです。
ただ、「←ここが上手くいかない」のところが上手くいきません。
(DailyCalendarFragment.javaの56行目)
ライフサイクルメソッドで、順序を付けているつもりなんですが、
Timely_RecyclerView_Adapterの実行 → クエリの実行
となってしまい、Timely_RecyclerView_Adapterへクエリの実行結果
を渡したいのにクエリがされていないため null で渡されてしまします。
(this.allTimeTable が null になる)
何か解決策ございましたら、ご教授よろしくお願いいたします。
申し訳ありませんが、もし情報が不足しているようでしたら
ご指摘いただけますと幸いです。
どうぞよろしくお願いいたします。
該当のソースコード
DailyCalendarFragment.java
1package com.example.RecordTime; 2 3~省略~ 4 5public class DailyCalendarFragment extends Fragment { 6 7 public static List<TimeTable_RoomEntity> allTimeTable; 8 9 @Override 10 public void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 loadDB(); 13 Log.d("a", "a"); 14 } 15 16 @Override 17 public View onCreateView(LayoutInflater inflater, ViewGroup container, 18 Bundle savedInstanceState) { 19 Log.d("b", "b"); 20 21 // Inflate the layout for this fragment 22 return inflater.inflate(R.layout.daily_calendar_fragment, container, false); 23 } 24 25 26 @Override 27 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 28 Log.d("c", "c"); 29 30 // RecyclerView を生成して各日にちを生成 31 RecyclerView recyclerView = getActivity().findViewById(R.id.time_recycler_view_container); 32 // ①recycleView に layoutManager をセット 33 recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 34 // ②Adapter を生成して RecyclerView にセット 35 recyclerView.setAdapter(new Timely_RecyclerView_Adapter(getContext(), this.allTimeTable)); //←ここが上手くいかない 36 } 37 38 39 public void loadDB() { 40 ExecutorService executor = Executors.newSingleThreadExecutor(); 41 42 executor.submit(new Runnable() { 43 @Override 44 public void run() { 45 Database database = Room.databaseBuilder(getContext(), Database.class, "TimeTable").build(); 46 47 TimeTable_Dao dao = database.timeTable_dao(); 48 dao.insert(new TimeTable_RoomEntity("0番目のtitle")); 49 dao.insert(new TimeTable_RoomEntity("1番目のtitle")); 50 dao.insert(new TimeTable_RoomEntity("2番目のtitle")); 51 52 List<TimeTable_RoomEntity> allTimeTable = dao.getAll(); 53 54 if(allTimeTable.isEmpty()) { 55 Log.d("allTimeTable========>", "empty == true"); 56 } else { 57 Log.d("aaaaaaaaaaaa========>", allTimeTable.get(0).title); 58 } 59 60 DailyCalendarFragment.allTimeTable = allTimeTable; 61 } 62 }); 63 } 64}
Timely_RecyclerView_Adapter.java
1package com.example.RecordTime; 2 3~省略~ 4 5public class Timely_RecyclerView_Adapter extends RecyclerView.Adapter<Timely_RecyclerView_Adapter.ViewHolder> { 6 7 8 // ============= Adapter =============== 9 List<TimeTable_RoomEntity> allTimeTable; 10 Context context; 11 12 Timely_RecyclerView_Adapter(Context context, List<TimeTable_RoomEntity> allTimeTable) { 13 this.context = context; 14 this.allTimeTable = allTimeTable; 15 } 16 17 @Override 18 public int getItemCount() { 19 return 3; 20 } 21 22 @Override 23 public void onBindViewHolder(@NonNull ViewHolder holder, int position) { 24// holder.textView.setText(this.allTimeTable.get(position).title); 25 Log.d("e", "e"); 26 } 27 28 @NonNull 29 @Override 30 public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 31 View view = LayoutInflater.from(context).inflate(R.layout.time_viewholder, parent, false); 32 Log.d("bbb", "bbb"); 33 return new Timely_RecyclerView_Adapter.ViewHolder(view); 34 } 35 // ============= Adapter =============== 36 37 38 // ============= viewHolder ============ 39 public class ViewHolder extends RecyclerView.ViewHolder { 40 public TextView textView; 41 public ViewHolder(@NonNull View itemView) { 42 super(itemView); 43 this.textView = itemView.findViewById(R.id.time_view_holder); 44 } 45 } 46 // ============= viewHolder ============= 47}
レイアウト追記
①今回メインとして扱うレイアウト
daily_calendar_fragment.xml
1<?xml version="1.0" encoding="utf-8"?> 2<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="300dp" 5 android:layout_height="500dp" 6 android:background="@drawable/border" 7 tools:context=".DailyCalendarFragment"> 8 9 <androidx.recyclerview.widget.RecyclerView 10 android:id="@+id/time_recycler_view_container" 11 android:layout_width="match_parent" 12 android:layout_height="match_parent" /> 13</FrameLayout>
②メインのフラグメント内のRecyclerViewのViewholder
time_viewholder.xml
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent"> 5 6 <TextView 7 android:id="@+id/time_view_holder" 8 android:layout_width="match_parent" 9 android:layout_height="wrap_content" 10 android:layout_weight="1" 11 android:ems="10" 12 android:text="@string/time_view_holder" /> 13</LinearLayout>
※③今回のメインフラグメントを置くフラグメント
date_fragment.xml
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent"> 7 8 <LinearLayout 9 android:id="@+id/date" 10 android:layout_width="match_parent" 11 android:layout_height="25sp" 12 android:layout_marginBottom="706dp" 13 android:backgroundTint="@color/design_default_color_primary_dark" 14 android:gravity="center" 15 android:orientation="horizontal" 16 app:layout_constraintBottom_toBottomOf="parent" 17 app:layout_constraintEnd_toEndOf="parent" 18 app:layout_constraintStart_toStartOf="parent" 19 app:layout_constraintTop_toTopOf="parent"> 20 21 <TextView 22 android:id="@+id/selected_month" 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:text="@string/fuu" /> 26 27 <TextView 28 android:id="@+id/selected_date" 29 android:layout_width="wrap_content" 30 android:layout_height="wrap_content" 31 android:text="@string/selected_date" /> 32 </LinearLayout> 33 34 <androidx.fragment.app.FragmentContainerView 35 android:id="@+id/fragmentContainerView" 36 android:name="com.example.RecordTime.DailyCalendarFragment" 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content" 39 app:layout_constraintBottom_toBottomOf="parent" 40 app:layout_constraintEnd_toEndOf="parent" 41 app:layout_constraintStart_toStartOf="parent" 42 app:layout_constraintTop_toBottomOf="@+id/date" /> 43 44</androidx.constraintlayout.widget.ConstraintLayout>
★★★引数自体は渡せたかと思いましたがエラーが出るパターン★★★
エラー:No adapter attached; skipping layout
DailyCalendarFragment.java
1package com.example.RecordTime; 2~省略~ 3 4public class DailyCalendarFragment extends Fragment { 5 6 @Override 7 public void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 } 10 11 @Override 12 public View onCreateView(LayoutInflater inflater, ViewGroup container, 13 Bundle savedInstanceState) { 14 View view = inflater.inflate(R.layout.daily_calendar_fragment, container, false); 15 loadDB(view); 16 return view; 17 } 18 19 public void loadDB(View view) { 20 ExecutorService executor = Executors.newSingleThreadExecutor(); 21 22 executor.submit(new Runnable() { 23 @Override 24 public void run() { 25 Database database = Room.databaseBuilder(getContext(), Database.class, "TimeTable").build(); 26 27 TimeTable_Dao dao = database.timeTable_dao(); 28 dao.insert(new TimeTable_RoomEntity("0番目のtitle")); 29 dao.insert(new TimeTable_RoomEntity("1番目のtitle")); 30 dao.insert(new TimeTable_RoomEntity("2番目のtitle")); 31 32 List<TimeTable_RoomEntity> allTimeTable = dao.getAll(); 33 34 setRecyclerView(view, allTimeTable); 35 } 36 }); 37 } 38 39 40 public void setRecyclerView(View view, List<TimeTable_RoomEntity> allTimeTable) { 41 // RecyclerView を生成して各時間を生成 42 RecyclerView recyclerView = view.findViewById(R.id.time_recycler_view_container); 43 // ①recycleView に layoutManager をセット 44 recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 45 // ②Adapter を生成して RecyclerView にセット 46 recyclerView.setAdapter(new Timely_RecyclerView_Adapter(getContext(), allTimeTable)); 47 } 48}

回答1件
あなたの回答
tips
プレビュー