2016-08-26 7 views
1

私はここで間違っているのか分かりません。私はすべて同じ上記のアダプタを持っている別のフラグメントを取引しています、私の活動でアダプターが変更された後のバターナイフのレイアウトが読み込まれない

public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> { 

    private final List<String> sourceData; 

    public TestAdapter(List<String> sourceData) { 
     this.sourceData = sourceData; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.spanitem_goods, parent, false); 
     return new ViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     String item = sourceData.get(position); 
     holder.textView.setText(item); 
    } 

    @Override 
    public int getItemCount() { 
     return sourceData.size(); 
    } 

    static class ViewHolder extends RecyclerView.ViewHolder { 

     @BindView(R.id.spanitem_imageView) 
     ImageView imageView; 
     @BindView(R.id.spanitem_textView) 
     TextView textView; 

     public ViewHolder(View v) { 
      super(v); 
      ButterKnife.bind(this, v); 
     } 
    } 
} 

どこか:

私のアダプタは、このようになります。これは、内と外にそれらを交換すると正常に動作しますが、できるだけ早く私は、アダプタ

adapter.notifyItemInserted(position); 

上でこれを呼び出し、inとout再び断片をスワップとして、それはもはや任意のレイアウトをロードしません。ちょうど空白のページと私は上記のメソッドを呼び出すときに発生します。

私の抽象BaseFragmentこのonCreateView

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    Log.d(TAG, "... onCreateView() called"); 
    View v = inflater.inflate(getLayoutResourceId(), container, false); 
    unbinder = ButterKnife.bind(this, v); 
    ButterKnife.setDebug(true); 
    return v; 
} 

@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
    unbinder.unbind(); 
    Log.d(TAG, "... onDestroyView() called"); 
} 
+0

すべてのフラグメントが 'TestAdapter'の同じインスタンスを共有しているのですか?同じクラスの複数のインスタンスしか使用していませんか? – NitroNbg

+0

@NitroNbg彼らはすべて自分のインスタンスを持っています –

+0

ここでは、 'adapter.notifyItemInserted(position);'はここでは赤い鳴き声になる可能性がある(つまり、それは基本的なバグではない)と思います。 – NitroNbg

答えて

0

にまあ、私は問題を発見しました。エントリの質問には関係ないようですが、他の人を助けるかもしれません。

私はObserverパターンを使用していて、非UIスレッドではupdateメソッドを実行していました。手動でスクロールしない限り、RecyclerViewは更新されていないので、それが問題だったようです。

@Override 
    public void update(final String epc) { 
     getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       sourceData.add(epc); 
       notifyDataSourceChanged(sourceData.size() - 1); 
      } 
     }); 

    } 
関連する問題