修改适配器后 Butterknife 不加载布局
Butterknife not loading layout after adapter has been modified
我不知道我做错了什么。
我的适配器看起来像这样:
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);
}
}
}
在我的 Activity 中的某个地方,我正在处理不同的片段,这些片段具有与上述适配器完全相同的片段。它可以很好地交换它们,但只要我在适配器上调用它
adapter.notifyItemInserted(position);
并再次交换片段,它不再加载任何布局。只是一个空白页,只有当我调用上述方法时才会发生这种情况。
我的摘要 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");
}
嗯,我发现了问题。似乎与入门问题无关,但我可能会帮助别人。
我正在使用 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);
}
});
}
我不知道我做错了什么。
我的适配器看起来像这样:
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);
}
}
}
在我的 Activity 中的某个地方,我正在处理不同的片段,这些片段具有与上述适配器完全相同的片段。它可以很好地交换它们,但只要我在适配器上调用它
adapter.notifyItemInserted(position);
并再次交换片段,它不再加载任何布局。只是一个空白页,只有当我调用上述方法时才会发生这种情况。
我的摘要 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");
}
嗯,我发现了问题。似乎与入门问题无关,但我可能会帮助别人。
我正在使用 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);
}
});
}