我有一个 fragment ,它是一个数据库值列表。我正在使用 ListView 将值显示到屏幕上。
我有另一个 fragment ,其中包含用于将条目添加到数据库的按钮。所以我的问题是,当我通过点击第一个 fragment 上的按钮向数据库添加条目时,我需要第二个 fragment (或应用程序中的第二页)来更新屏幕上显示的数据库值列表.
这是数据库列表 fragment :
public class FragManage extends Fragment {
private PunchesDataSource datasource;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
datasource = new PunchesDataSource(getActivity());
datasource.open();
List<Punch> values = datasource.getAllPunches();
// Use the SimpleCursorAdapter to show the elements in a ListView
ArrayAdapter<Punch> adapter = new ArrayAdapter<Punch>(getActivity(),
android.R.layout.simple_list_item_1, values);
View myFragmentView = inflater.inflate(R.layout.fragment_manage, container, false);
ListView list = (ListView) myFragmentView.findViewById(R.id.list);
list.setAdapter(adapter);
return myFragmentView;
}
}
所以我只想在我的另一个包含按钮的 fragment 中执行 adapter.notifyDataSetChanged()(类似这样):
// Punch OUT button.
Button out_button = (Button) myFragmentView.findViewById(R.id.out_button);
out_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
datasource.createPunch("out-" + getTime());
FragManage.adapter.notifyDataSetChanged();
}
});
最佳答案
您可以在更新 fragment 的主要 Activity 中使用监听器
在带有按钮的 fragment 中添加这些
private void onDBChanged(){
OnDBListener.DBChanged(true);
}
public void setOnDBListener(OnDBListener listener){
this.OnDBListener = listener;
}
public interface OnDBListener{
public void DBChanged(boolean DB_Bool);
}
然后在数据库 fragment 中
public void update(){
adapter.notifyDataSetChanged();
}
然后在创建 fragment 的主 Activity 中附加监听器
ButtonsFragment.setOnDBListener(new OnDBListener() {
@Override
public void DBChanged(boolean DB_Bool) {
DatabaseViewFrag.update();
}
});
当您在按钮 fragment 调用中更新数据库时
onDBChanged()
告诉它已经更新的一切
关于android - 在 fragment 外执行 adapter.notifyDataSetChanged(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14393880/