1

私はAndroid TVアプリケーションを作成しており、この問題にぶつかりました。私は、イベントを受け取ると、BrowseFragmentのすべての行を新しいものに置き換える必要があります。 私が試したもの:mRowsAdapterはListRow項目とArrayObjectAdapterがあるAndroid TVのBrowseFragmentでのデータの再読み込み

mRowsAdapter.clear(); 
... 
mRowsAdapter.add(add new rows here); 

mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); 
setAdapter(mRowsAdapter); 
mRowsAdapter.add(add new rows here); 

そしてthis questionから解決策: はまた、このアプローチを試してみました。どちらも動作しません。私はIOBEを得続けます。ログは次のとおりです。

       java.lang.IndexOutOfBoundsException: Index: 7, Size: 0 
            at java.util.ArrayList.get(ArrayList.java:411) 
            at android.support.v17.leanback.widget.ArrayObjectAdapter.get(ArrayObjectAdapter.java:56) 
            at android.support.v17.leanback.app.ListRowDataAdapter.get(ListRowDataAdapter.java:65) 
            at android.support.v17.leanback.widget.ItemBridgeAdapter.getItemViewType(ItemBridgeAdapter.java:248) 
            at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:5046) 
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5172) 
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5153) 
            at android.support.v17.leanback.widget.GridLayoutManager.getViewForPosition(GridLayoutManager.java:971) 
            at android.support.v17.leanback.widget.GridLayoutManager$2.createItem(GridLayoutManager.java:1464) 
            at android.support.v17.leanback.widget.SingleRow.appendVisibleItems(SingleRow.java:111) 
            at android.support.v17.leanback.widget.Grid.appendVisibleItems(Grid.java:371) 
            at android.support.v17.leanback.widget.GridLayoutManager.appendVisibleItems(GridLayoutManager.java:1702) 
            at android.support.v17.leanback.widget.GridLayoutManager.fastRelayout(GridLayoutManager.java:1764) 
            at android.support.v17.leanback.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:1888) 
            at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3374) 
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3183) 
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3627) 
            at android.view.View.layout(View.java:17519) 
            at android.view.ViewGroup.layout(ViewGroup.java:5612) 
            at android.support.v17.leanback.widget.ScaleFrameLayout.onLayout(ScaleFrameLayout.java:172) 
            at android.view.View.layout(View.java:17519) 
            at android.view.ViewGroup.layout(ViewGroup.java:5612) 
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
            at android.view.View.layout(View.java:17519) 
            at android.view.ViewGroup.layout(ViewGroup.java:5612) 
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
            at android.view.View.layout(View.java:17519) 
            at android.view.ViewGroup.layout(ViewGroup.java:5612) 
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
            at android.view.View.layout(View.java:17519) 
            at android.view.ViewGroup.layout(ViewGroup.java:5612) 
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
            at android.view.View.layout(View.java:17519) 
            at android.view.ViewGroup.layout(ViewGroup.java:5612) 
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
            at android.view.View.layout(View.java:17519) 
            at android.view.ViewGroup.layout(ViewGroup.java:5612) 
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
            at com.android.internal.policy.DecorView.onLayout(DecorView.java:724) 
            at android.view.View.layout(View.java:17519) 
            at android.view.ViewGroup.layout(ViewGroup.java:5612) 
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2342) 
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2069) 
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246) 
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301) 
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) 
            at android.view.Choreographer.doCallbacks(Choreographer.java:683) 
            at android.view.Choreographer.doFrame(Choreographer.java:619) 
com.cloudify E/AndroidRuntime:  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) 
            at android.os.Handler.handleCallback(Handler.java:751) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:154) 
            at android.app.ActivityThread.main(ActivityThread.java:6077) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

助けてください。ありがとうございました。

+0

があなたのアレイ/コンテナを確認しましたか?私はあなたが空であることを意味するサイズ0を持つ配列からインデックスを取得しようとしていると思う " – noogui

+0

私は自分の質問に書いたことを理解していないと確信しています –

+0

実際には、コード –

答えて

0

アダプタのオブジェクトの内部配列がアイテムを追加する場所を決定するために独自のサイズを使用しようとしているため、インデックスが範囲外になっています。

/** 
* Adds an item to the end of the list. 
* 
* @param item The item to add to the end of the list. 
*/ 
public void add(Object item) { 
    add(mItems.size(), item); 
} 
/** 
* Inserts an item into this list at the specified index. 
* 
* @param index The index at which the item should be inserted. 
* @param item The item to insert into the list. 
*/ 
public void add(int index, Object item) { 
    mItems.add(index, item); 
    notifyItemRangeInserted(index, 1); 
} 

いくつかの方法を使用すると、明確な呼び出しが一時的に調子が悪い何かを残していると内部インデックスは、それが実際に何であるかのオフであることを意味している - あなたは)そのは内部的にこれをやって(.add呼び出す

arraylistはIOBEを吐く。おそらくadd(0、yourArray)を代わりに使ってみてください。

EDIT:あなたのオブジェクトを追加する前に、検証のいくつかの種類を追加する

試してみます。ような何か:

if((myAdapter.size() - 1) > indexImTryingToAddAt) 
{ 
    myAdapter.addAll(indexImTryingToAddAt, arrayOfObjects); 
} 
else 
{ 
    Log.d("index is larger than current adapter", indexImTryingToAddAt+""); 
} 
+0

ソースを読みました。 'clear()'メソッドでは、mItems.size()を0に設定するmItems.clear()行を見ることができます。デバッガでチェックし、その点で問題なく動作します。データがあります。次のUIの再描画中にFCが実行されますが、それでもどのようにビートするのかはわかりません。 –

+0

addAll()メソッドを使用する方法については、試してみましたか? –

+0

はい、同じ結果 –

0

これを行うにしてください:

 
    mRowsAdapter.clear(); 
    mRowsAdapter.add(add new rows here); 
    mRowsAdapter.notifyArrayItemRangeChanged(0, mRowsAdapter.size()); 
+0

それを試してみましたが、助けになりませんでした。さらに、2行目は3行目を内部的に呼び出すので、明示的に呼び出す必要はありません。とにかく、それの有無にかかわらず動作しません。 –

+0

それはうまくいくはずですが、間違ったアダプタや新しいインスタンスでやっているかもしれません...そのコードではわかりません。 –

関連する問題