私は別のアクティビティを開く「プレーヤーを追加」する主な活動上のボタンを持ってKotlinでAndroidアプリを、構築しています。この「追加プレーヤー」アクティビティでは、手動で第三、「ポップアップ」の活動を立ち上げるプレーヤーを、追加することを選択することができます。人は情報を入力し、[追加]を打ちます。そのクリックで、私はすぐに新しい「プレイヤー」オブジェクトを作成し、主な活動の現役選手のリストビューを更新します。
私が使用することを読んでadapter.notifyDataSetChanged()
、しかし、問題は、私はそのアダプタ(ArrayAdapter)オブジェクトへの参照を取得する方法を見つけることができない、です。これは、Javaだった場合、私はちょうどアダプタは世界的に利用できるようにする、または公共の静的な、そのようなことでしょう。しかし、これはすべてが私のために一体として混乱さKotlinです。誰もが通過する「コンテキスト」パラメータが「これは」仕事をしませんので、私は、アダプタを初期化することはできませんので、私は、アダプタがグローバルに使用することはできません。私は、パブリックまたは静的に変更する任意の関数を作成することはできません。Kotlinは、何らかの理由で私に怒っているので、私はまた、いずれかの変数をlateinitすることはできません。
私は私のアプリのための愚かなリストビューを更新しようとして2時間のように過ごしました。私が作ったアプリを練習すると、このような小さなものに巻き込ましようとすると、それはかなりがっかりしています。
私は大きな誤解を持っていると確信している、誰かが正しい方向に私を指すことができれば、それは素晴らしいことです!
あなたは非常に多くのみんなに感謝し、
その他
お使いのアダプタ/ビュー/ ActivityContextグローバル変数をしないでください、そうでない場合、あなたは本当に大きなメモリの問題を取得します。
あなたは、使用しようとすべきローカル放送受信機を。アダプタを持って活動Aからは、登録することができますLocal BroadCast receiver
にonCreate
任意の変更アダプタアクションに耳を傾けます。ここでは例を示します。
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("YourAdapaterChangeAction.");
LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
// check your action with if/else
//adapter.notify....
}
},intentFilter);
その後、あなただけ発射できるLocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("YourAdapaterChangeAction"));
アダプタを更新する一切の活動から。
P / S:別のオプションは使用することですstartActivityForResult
。