android - RecyclerView 中的 notifyDatasetChanged 无法在 Fragment 中工作

标签 android adapter notifydatasetchanged

我在数据库更改后调用我的适配器上的 notifyDataSetChanged 方法,但此方法未更新 View 。

在 cardview 上点击我的类 fragment 打开一个外部 Activity 我使用接口(interface)接收事件 onActivityResult(这正确触发)

public interface StartActivityForResultInterface {
    public void myStartActivityForResult(Intent intent, int requestCode);
}

我的类 fragment

public class ContentFragment extends Fragment implements StartActivityForResultInterface {

    private PaffVocaliAdapter m_adapter;

    @Override
    public void myStartActivityForResult(Intent intent, int requestCode) {
        // do pre-processing here if you need to
        startActivityForResult(intent, requestCode);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.content_fragment,container,false);


        dbmanPaffVocali loc_dbmanPafflocali = new dbmanPaffVocali((getActivity()));
        List<PaffVocali> items = loc_dbmanPafflocali.lista();

        if (items.size() == 0)
        {
            for (int i = 0; i < 10; i++) {
                PaffVocali p = new PaffVocali();
                p.setTitolo("Tab #" + " item #" + i);
                items.add(p);
            }
        }

        m_adapter = new PaffVocaliAdapter(items);
        m_adapter.setCallback(this);

        RecyclerView recyclerView = (RecyclerView)v.findViewById(R.id.recyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setAdapter(m_adapter);

        return v;
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        m_adapter.notifyDataSetChanged();
    }

}

我的适配器类

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

private List<PaffVocali> mItems;
private StartActivityForResultInterface myInterface;

PaffVocaliAdapter(List<PaffVocali> items) {
    mItems = items;
}

public void setCallback (StartActivityForResultInterface myInterface) {
    this.myInterface = myInterface;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_listapaff, viewGroup, false);

    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    final PaffVocali item = mItems.get(i);
    viewHolder.mTextViewTitolo.setText(item.getTitolo());

    viewHolder.mTextViewEdit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Context context = view.getContext();
            //context.startActivityForResult(new Intent(context, crud_activity_paff.class));
            Intent intent = new Intent(context, crud_activity_paff.class);
            intent.putExtra("id",item.getId());
            myInterface.myStartActivityForResult(intent, 1);
        }
    });
}



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

public class ViewHolder extends RecyclerView.ViewHolder {

    private final TextView mTextViewTitolo;
    private final TextView mTextViewEdit;

    ViewHolder(View v) {
        super(v);
        mTextViewTitolo = (TextView) v.findViewById(R.id.cardpaff_titolo);
        mTextViewEdit = (TextView) v.findViewById(R.id.cardpaff_edit);

    }
}
}

我确定数据库已更改,当我重新启动应用程序时会显示新数据。

最佳答案

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
   dbmanPaffVocali loc_dbmanPafflocali = new dbmanPaffVocali((getActivity()));
    List<PaffVocali> items = loc_dbmanPafflocali.lista();

    if (items.size() == 0)
    {
        for (int i = 0; i < 10; i++) {
            PaffVocali p = new PaffVocali();
            p.setTitolo("Tab #" + " item #" + i);
            items.add(p);
        }
    }
    m_adapter.setMItems(items);//add the method
    m_adapter.notifyDataSetChanged();
}

尝试

关于android - RecyclerView 中的 notifyDatasetChanged 无法在 Fragment 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119275/

相关文章:

android - 在Activity/Fragment中,如何获取/等待ViewModel协程操作的返回值?

android - 在 android studio 3.3 中更新 Android 模拟器失败

java - Android ClassNotFoundException : Didn't find class on path

android - 替换图像时动态刷新 gridview。 notifyDataSetChanged() 不工作

java - 如何在 notifyDataSetChanged 后检索 GridView 对象?

Android模拟器的javascript日期问题

android - 在 Android 的 ListView 中滚动时 Listitems 改变位置

java - 出现错误 java.lang.NullPointerException : Attempt to invoke interface method 'int java.util.List.size()' on a null object reference

java - 设置 TextSpinner 适配器

java - 添加 notifyDataSetChanged() 后检测到不一致错误