java - 修改适配器后 Butterknife 未加载布局

标签 java android android-fragments butterknife

我不知道我在这里做错了什么。

我的适配器如下所示:

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 中的某个地方,我正在处理具有相同上述适配器的不同 fragment 。它可以很好地交换它们,但是一旦我在适配器上调用它

adapter.notifyItemInserted(position);

并再次交换 fragment ,它不再加载任何布局。只是一个空白页,只有当我调用上述方法时才会发生这种情况。

我的抽象BaseFragmentonCreateView中有这个

@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);
            }
        });

    }

关于java - 修改适配器后 Butterknife 未加载布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39164618/

相关文章:

android - 如何防止在 Fragment 不可见时激活 LiveData 观察者

android - 在 fragment 之间传递序列化对象与 JSON

java - 是否可以在使用 Ant 构建期间修改变量?

JAVA:HTML 到 XHTML 转换器

android - Android webkit 上的 CSS3 动画问题 -iteration-count 和 'forwards' 不要停止动画

android 一个列表项中光标的多行

Android fragment 布局问题(垂直和水平居中按钮)

java - 有没有办法将 OGNL 与 Struts2 UI 标签绑定(bind)

java - 如何使用正则表达式分割字符串文件名?

java - 来自 Java 编译器的 Android 中的 strictpf