如何在添加数据后刷新片段中的列表视图?
问题描述:
我将数据从选项卡片段插入到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);
}
}
}
答
你每次当你切换标签的时间刷新选项卡。为此,您必须创建一个Interface
,如下所示。
public interface MainHomeFragmentInterface {
void fragmentBecameVisible();
}
调用此Interface
在viewPager
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) {
}
});
,并在你的每个tab
fragment
实现这个Interface
。
答
为此,你需要添加下 资源的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>
我希望这可以帮助你! :)
答
您可以使用本地广播来通知显示需要刷新的数据的片段。
当您更改数据库中的数据时,您应该使用LocalBroadcastManager
发送广播,并在显示数据的片段内部设置BroadcastReceiver
。