android – 配置更改后的notifyDataSetChanged

android – 配置更改后的notifyDataSetChanged,第1张

概述我在更改设备配置(更改语言,方向等)后进行了一些测试,我注意到在此之后,方法“notifyDataSetChanged()”无法正常工作. 动作示例: 我每次执行删除,保存等 *** 作时都会调用updateList().用户单击删除按钮,会显示DialogFragment,“您确定要删除吗?”,当我更改方向时,或者语言或设备的任何配置,然后在对话框上单击“是”,数据将被删除,但列表不会更新.我需要退出活 我在更改设备配置(更改语言,方向等)后进行了一些测试,我注意到在此之后,方法“notifyDataSetChanged()”无法正常工作.

动作示例:

我每次执行删除,保存等 *** 作时都会调用updateList().用户单击删除按钮,会显示DialogFragment,“您确定要删除吗?”,当我更改方向时,或者语言或设备的任何配置,然后在对话框上单击“是”,数据将被删除,但列表不会更新.我需要退出活动,然后回去查看更改.

BookAdapter:

public voID updateList(ArrayList<Book> books) {     bookList = books;     notifyDataSetChanged();}

在配置更改后,我该怎么做才能使它工作?

编辑:

BookAdapter构造函数:

public BookAdapter(Context c,ArrayList<Book> books) {    context = c;    bookList = books    bookDAO = BookDAO.getInstance(context);}

BookFragment:

public class BookFragment extends Fragment {    private BookDAO bookDAO;    private BookAdapter bookAdapter;    private ListVIEw ListBook;    private VIEw vIEw;    @OverrIDe    public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {        bookDAO = bookDAO.getInstance(getActivity());        vIEw = inflater.inflate(R.layout.book_tab,container,false);        ArrayList<Book> ListBook = null;        try {            lListBook = bookDAO.getAll();        } catch (Exception e) {            Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_LONG).show();            return vIEw;        }        bookAdapter = new BookAdapter(getActivity(),ListBook);        ListBook = (ListVIEw)vIEw.findVIEwByID(R.ID.ListBook);        ListBook.setAdapter(bookAdapter);        return vIEw;    }}
解决方法 出现问题的原因是每次轮换,更改语言等…重新创建活动并重新创建片段(新实例),因此notififyDataSetChanged实际上是通知片段的旧实例.
解决方案就是这样.使你的片段静止.然后为片段创建一些刷新方法,并在按下对话框时调用它.

在你的活动中你应该有这样的东西.

private static BookFragment  bookFragment;...@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    ...    if (fragment1 == null) {        bookFragment = new BookFragment();    }    ...}

创建一些界面,如:

public interface Refreshable {    public voID refresh();}

然后将所有片段实现此接口.
在对话框得到肯定回答时调用的方法中,您应该调用

...fragment.refresh();...

在你片段的刷新方法中你可以调用它的适配器方法updateList(…)

可能不是更漂亮的解决方案,但它的工作原理….

为什么会发生这种情况……谷歌的AndroID开发团队可能知道.

总结

以上是内存溢出为你收集整理的android – 配置更改后的notifyDataSetChanged全部内容,希望文章能够帮你解决android – 配置更改后的notifyDataSetChanged所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1122107.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存