Android RecyclerViewで「アダプターが接続されていません」と表示され、問題解析がスキップされる。
2022-02-13 11:31:53
私たちのプロジェクトでは、RecyclerViewをよく使います。今日の最適化コードで、ふと印刷された情報に含まれていることがわかりました。
--error RecyclerView: アダプタが接続されていません。レイアウトをスキップしています。
しかし、このせいでアプリがクラッシュすることはなく、プロジェクトがタイトだったため、この作品にはあまり注意を払わなかったのです。時間ができたので、このエラーメッセージを見つけました。クラッシュはしないものの、このエラーメッセージを見るのはとても不愉快なので、直したいと思っています。
情報を調べた結果、この現象の原因として2つの可能性があることがわかりました。
1. リサイクルビューのレイアウト(ランドスケープ、ポートレート、グリッドなど)が設定されていない。
など、設定し忘れてはいけないと思います。
LinearLayoutManager mPerfectCourse = new LinearLayoutManager(mActivity);
mPerfectCourse.setOrientation(LinearLayoutManager.HORIZONTAL);// set the layout of the recyclerview to landscape
lvHotCourse.setLayoutManager(mPerfectCourse);
2. リサイクルビューのアダプタを設定するのが面倒くさいから
などが主な理由のような気がします。
onresume内部のデータを更新した後、cyclerviewのアダプタを設定し直すと、以下のような使い方ができますのでご覧ください。
@Override
public void onResume() {
super.onResume();
// get the data again each time
getAPPHomePageInfo(mActivity);
}
/**
* Home page user data - all data
*/
private void getAPPHomePageInfo(final Context context) {
/**
* Here omit the network request of those operations, look directly at the business, the default got the dataset popularTeacherList
*/
initHotTeachers(popularTeacherList);
}
/**
* Initialize.
*/
private void initHotTeachers(List<HotTeacher> mData) {
XXRecycleViewAdapter mRecycleViewAdapter = new XXRecycleViewAdapter (mActivity, new RequestManager(), this);
mRecycleViewAdapter .setData(mData);
if (rvHotTeachers == null)
return;
rvHotTeachers.setAdapter(mRecycleViewAdapter );
layoutHotTeachers.setVisibility(View.VISIBLE);
}
上記の書き方だと、cyclerview.setAdapter(mRecycleViewAdapter )を複数回実行することになり、この記事で紹介した問題が発生することになります。
正しい使用方法です。
onCreate(Activity)またはonCreateView(fragement)でアダプタを初期化し、 cyclerview.setAdapter に渡します。
アダプタはデータを更新するためのメソッドを公開し、データの取得に成功したら、アダプタのメソッドを呼び出してリフレッシュを実行する必要があります。
public void setData(List<MyCourseInfo> mData) {
this.mData = mData;
notifyDataSetChanged();//notify update
}
この時点でコードを辿ってみると、No adapter attached;skipping promptはもはや存在しないことがわかり、すっきりしました。
関連
-
com.android.ide.common.process.ProcessException が発生する可能性のある原因。aaptの実行に失敗したエラー(解決済み)
-
AndroidでFragmentを使用すると、Fragmentの内部コントロールを取得できず、findViewById()の結果がNullになる - 解決済み
-
Androidにおけるメッセージの仕組みの分析 - 解決策。ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる。
-
Eclipse &プラグインのよくある使用エラーとコンパイルエラー
-
60フレーム飛ばした!?アプリケーションがメインスレッドで過剰な作業を行っている可能性があります。
-
Android Control - TabLayout Usage Introduction
-
Intellij Ideaは、シンボルが見つからない、RクラスまたはRパッケージが存在しない、というエラーを報告します。
-
Android統計チャート MPAndroidChart
-
android ImageViewの割り当て問題 setImageResourceとsetImageBitmap
-
スピナー実装のダウンメニューとイベントリスニング(グラフィックモード)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[100%効果的】AndroidStudioコンソールコンパイル出力中国の乱雑なコードを解決する、プロテストソリューション!
-
アプリの実行エラー。デフォルトのアクティビティが見つかりません
-
Error:Execution failed for task ':app:compileDebugJavaWithJavac' 根本的な解決方法
-
Android フロントカメラのビデオ録画に失敗しました (MediaRecorder: start failed: -19)
-
JSONException: java.lang.String は JSONObject ソリューションに変換できません。
-
Androidのボトムナビゲーションバー、3つのスタイルとインプリメンテーション
-
AndroidのRadioButtonの中央寄せ問題(解決済み)
-
AndroidManifestのuses-permissionの設定
-
AndroidManifestの使用機能の設定
-
ARMアセンブリ共通命令 NULL演算 NOP命令