私は、Androidアプリケーションに取り組んでいる、と私はlistview
に大量のデータを表示しようとしたとき、私は、次のエラーが表示さ:「オブザーバー...登録されていません」というエラー
01-24 18:06:32.214:
INFO/System.out(9244):
EX:Observer [email protected]
was not registered.
私は、Androidアプリケーションに取り組んでいる、と私はlistview
に大量のデータを表示しようとしたとき、私は、次のエラーが表示さ:「オブザーバー...登録されていません」というエラー
01-24 18:06:32.214:
INFO/System.out(9244):
EX:Observer [email protected]
was not registered.
をIこのエラーもあります。私は
setAdapter(Adapter)
複数回呼び出されるので、私の場合、この例外では
は(オブザーバー*が登録されていませんでした。)スローされました。例えば
:
MyAdapter (extends BaseAdapter) vla;
ListView lv;
for (int i = 0; i < 2; i++) {
vla.clear();
vla.add(tv);
lv.setAdapter(vla);
}
ここで修正が、それによって複数のコールを回避する、ループの外側 v.setAdapter(vla);
を配置することです。
修正後も例外がスローされません。
よろしくお願いします。 (fldr at mail mail dot ru)
この問題をどのように修正しますか? –
私はこの問題をlistviewsを扱うときに何回も遭遇しました。編集テキストを含むカスタムアダプターを使用している場合は、アダプターをリフレッシュする前にclearFocus()を実行する必要があります。これはその後、私はunfocusAllを呼び出す
class viewHolder {
public viewHolder() {
views = new ArrayList<viewInfo>();
}
public int position;
public ArrayList<viewInfo> views;
public View view;
}
私のカスタム・アダプターのためのビューホルダー(ある :登録されていないオブザーバーは、私はそれを行う方法の活動
に焦点を当てた子を削除するリストビューによって引き起こされます)で構成されている:あなたはあなたのリストビューを呼び出す前に、
public void unFocusAll() {
viewHolder holder = (viewHolder) v.getTag();
if (holder != null) {
holder.view.clearFocus();
}
}
だから、
CustomAdapter aa = new CustomAdapter();
if (aa != null) {
aa.unFocusAll();
}
をしなければなりません
あなたのコード例があまり明確でないのを恐れています。 unFocusAll()関数で、vとは何ですか?さらに、unFocusAllはCustomAdapterのメソッドですか?なぜviewHolderクラスが必要なのでしょうか? –
私も今日この問題を抱えており、洪水の答えが私の解決に役立った。私の場合は、別のアプリケーションから私のアプリケーションに切り替えたときにエラーが表示されるので、setAdapterメソッドは常に2度呼び出されます。
if (pager.getAdapter() == null){
pager.setAdapter(pagerAdapter);
}
感謝を:
これは私がそれを避ける助けました!
私は同じ問題に直面し、スレッドの問題であることが判明しました。複数のスレッドがスレッドセーフではないように見えるsetAdapter
を呼び出していました。すべてのsetAdapter
呼び出しが同じスレッドで行われたことを確認した後、問題は解決されました。私のためにうまく働いていた何
は、唯一のUIスレッド上で、それを変更するために自分のコードを強制することでした:Viewpager
@Override
ます。public void onDestroyView()を含むフラグメント{
で
runOnUiThread(new Runnable() {
@Override
public void run() {
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rc_view);
recyclerView.setAdapter(new MyAdapter(items));
}
});
私はまた、UIスレッドで実行して修正しました。私のコードをrun(){}の中に移動するだけです – lxknvlk
スーパー。onDestroyView();
viewDestroyed = true;あなたのアダプタで
その後、 }
(viewDestroyed)
pager.setAdapter(アダプタ)場合は、アダプタのチェック
を設定する前に
よろしく
単にオーバーライドはをonGroupCollapsed。
は、アダプターに入れる:
@Override
public void onGroupCollapsed(int groupPosition) {
}
これで運を?私は同じ問題を抱えています。回答がないときに、ここで回答を受け入れるように指示している理由はわかりません: – odiggity