滑动选项卡中的ListView未更新,除非重新启动

Hoo*_*Hoo 5 sqlite android listview swipe

在我的应用程序中,它有两个选项卡,一个是Reminder,另一个是Completed Task.

在此输入图像描述

单击切换按钮时,我希望将列表移动到已完成的任务.

这个想法是:

  • 从sqlite获取选中的行id
  • 从Reminder Table中检索基于id的数据并插入Completed Table.
  • "完成"选项卡中的"呼叫检索"方法.

但是当我点击切换按钮并滑动到已完成时,它仍然是空的.退出应用程序后,然后滑动到选项卡,只显示数据.

如何滑动而不是退出应用并再次重新打开时,如何立即将数据显示在"已完成"选项卡中?谢谢

AllAdapter(提醒)

 holder.toggle.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (((ToggleButton)v).isChecked()) {
                        int getPosition = (Integer) v.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                        search.get(getPosition).setSelected(((ToggleButton) v).isChecked());
                        int id= search.get(getPosition).getID();
                        mdb = new MyDatabaseHelper(v.getContext());
                        database = mdb.getReadableDatabase();
                        Cursor cursor = database.rawQuery("SELECT * FROM " + MyDatabaseHelper.TABLE__TASK + " WHERE ID = ? ", new String[]{id+""}, null);
                        if (cursor != null && cursor.getCount() > 0) {
                            while (cursor.moveToNext()) {
                                String allTask = cursor.getString(cursor.getColumnIndex("Title"));
                                String name = cursor.getString(cursor.getColumnIndex("Name"));
                                String allTime = cursor.getString(cursor.getColumnIndex("Time"));
                                String allDate = cursor.getString(cursor.getColumnIndex("Date"));
                                insertDataToCompleteTab(id,name,allTask,allTime,allDate);    // insert to another table
                            } 

                        }
                    } else {
                        int getPosition = (Integer) v.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                        search.get(getPosition).setSelected(((ToggleButton) v).isChecked());
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

CompletedTask

retrieveList(name);

 public void retrieveList(String name) {
        Toast.makeText(getActivity(),name,Toast.LENGTH_SHORT).show();
        search.clear();
        database = mdb.getReadableDatabase();
        Cursor cursor = database.rawQuery("SELECT * FROM " + MyDatabaseHelper.TABLE_TASKCOMPLETED + " WHERE Name = ? ", new String[]{name}, null);
        if (cursor != null && cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                int iD = cursor.getInt(cursor.getColumnIndex("ID"));
                String allTask = cursor.getString(cursor.getColumnIndex("Title"));
                String allTime = cursor.getString(cursor.getColumnIndex("Time"));
                String allDate = cursor.getString(cursor.getColumnIndex("Date"));

                if (adapter != null) {
                    adapter.add(iD, allTask, allTime, allDate);
                    listview.setAdapter(adapter);
                    adapter.getCount();
//                    check();
                }
            }
        } else {
        }
    }
Run Code Online (Sandbox Code Playgroud)

AllAdapter

http://pastebin.com/qbLDtf4v

完成标签

http://pastebin.com/WCCbZ0h4

CompleteAdapter

http://pastebin.com/QdbuTQKm

Swa*_*nil 3

来自片段生命周期的 Android 文档

系统显示的片段onResume()onPause()仅在活动onResume()或被onPause()调用时才会被调用。它们与 Activity 紧密耦合。

因此,当选项卡更改时,您无法刷新视图。

为了解决这个问题,我在我的应用程序中的setUserVisibleHint中找到了一个解决方案 ,因为我们有相同的要求。Viewpager调用片段的以下函数并在片段代码中实现它

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    // Make sure that we are currently visible
    if (this.isVisible()) {
        // If we are becoming invisible, then...
        if (!isVisibleToUser) {
            Log.d("TAG", "Stop animation and audio you are not visible");

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是文档所说的

向系统设置有关此片段的 UI 当前是否对用户可见的提示。此提示默认为 true,并且在片段实例状态保存和恢复期间持续存在。应用程序可以将其设置为 false,以指示片段的 UI 滚动到不可见状态,或者以其他方式对用户不直接可见。系统可以使用它来对诸如片段生命周期更新或加载器排序行为之类的操作进行优先级排序。可以在片段生命周期之外调用该方法。因此对于片段生命周期方法调用没有顺序保证。

ViewPager 在其子片段上调用此方法。有关更多信息,ViewPager 还称,setMenuVisibility如果您在显示或删除菜单时遇到问题,可以使用它。请参阅setMenuVisibility documnet的链接,其中指出

设置此片段的菜单是否可见的提示。如果您知道片段已放置在视图层次结构中,以便用户当前无法看到它,那么它所具有的任何菜单项也不应该显示,这非常有用。