2017-11-11 158 views
0

我将数据从选项卡片段插入到sqlite数据库中。我的问题是一旦数据被插入或从列表中删除,更新后的列表仅在应用程序重新启动后才会显示。新数据添加到列表后,如何使片段刷新?如何在添加数据后刷新片段中的列表视图?

任何帮助,这将不胜感激。

public Tab1() { 
    // Required empty public constructor 
} 



// TODO: Rename and change types and number of parameters 
public static Tab1 newInstance(String param1, String param2) { 
    Tab1 fragment = new Tab1(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 

     return fragment; 
} 



@Override 
public void onCreate(Bundle savedInstanceState) { 


    super.onCreate(savedInstanceState); 

    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 

    } 

} 


//load tasks into the list 
private void loadTaskList() { 

    ArrayList<String> taskList = dbHelper.getTaskList(); 
    if (mAdapter == null) { 
     mAdapter = new ArrayAdapter<String>(getActivity(), R.layout.row, R.id.task_title, taskList); 
     lstTask.setAdapter(mAdapter); 

    } else { 
     mAdapter.clear(); 
     mAdapter.addAll(taskList); 
     mAdapter.notifyDataSetChanged(); 
    } 



} 


    @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View frag1 = inflater.inflate(R.layout.fragment_tab1, container, false); 

    dbHelper = new DbHelper(getActivity()); 
    lstTask = (ListView)frag1.findViewById(R.id.lstTask); 

    loadTaskList(); 

     return frag1; 

} 
// TODO: Rename method, update argument and hook method into UI event 
public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

}

回答

0

你每次当你切换标签的时间刷新选项卡。为此,您必须创建一个Interface,如下所示。

public interface MainHomeFragmentInterface { 
    void fragmentBecameVisible(); 
} 

调用此InterfaceviewPager

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 
       MainHomeFragmentInterface fragment = (MainHomeFragmentInterface) mPagerAdapter.instantiateItem(mViewPager, position); 
       if (fragment != null) { 
        fragment.fragmentBecameVisible(); 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

,并在你的每个tabfragment实现这个Interface

0

为此,你需要添加下 资源的XML文件> XML> pref_data_sync.xml 其中将包含

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <ListPreference 
     android:defaultValue="180" 
     android:entries="@array/pref_sync_frequency_titles" 
     android:entryValues="@array/pref_sync_frequency_values" 
     android:key="sync_frequency" 
     android:negativeButtonText="@null" 
     android:positiveButtonText="@null" 
     android:title="@string/pref_title_sync_frequency" /> 

    <Preference android:title="@string/pref_title_system_sync_settings"> 
     <intent android:action="android.settings.SYNC_SETTINGS" /> 
    </Preference> 

</PreferenceScreen> 

其中@array文件都包含在string.xml为 -

<string-array name="pref_sync_frequency_titles"> 
     <item>15 minutes</item> 
     <item>30 minutes</item> 
     <item>1 hour</item> 
     <item>3 hours</item> 
     <item>6 hours</item> 
     <item>Never</item> 
    </string-array> 

    <string-array name="pref_sync_frequency_values"> 
     <item>15</item> 
     <item>30</item> 
     <item>60</item> 
     <item>180</item> 
     <item>360</item> 
     <item>-1</item> 
    </string-array> 

    <string name="pref_title_sync_frequency">Sync frequency</string> 

    <string name="pref_title_system_sync_settings">System sync settings</string> 

我希望这可以帮助你! :)

1

您可以使用本地广播来通知显示需要刷新的数据的片段。

当您更改数据库中的数据时,您应该使用LocalBroadcastManager发送广播,并在显示数据的片段内部设置BroadcastReceiver

请参阅How to use LocalBroadcastManager?