Android 在片段外部执行adapter.notifyDataSetChanged()
我有一个片段是数据库值的列表。我正在使用ListView向屏幕显示值 我有另一个片段,其中包含向数据库添加条目的按钮。所以我的问题是,当我通过点击第一个片段上的按钮向数据库添加条目时,我需要第二个片段(或应用程序中的第二个页面)来更新屏幕上显示的数据库值列表 以下是数据库列表片段:Android 在片段外部执行adapter.notifyDataSetChanged(),android,listview,adapter,Android,Listview,Adapter,我有一个片段是数据库值的列表。我正在使用ListView向屏幕显示值 我有另一个片段,其中包含向数据库添加条目的按钮。所以我的问题是,当我通过点击第一个片段上的按钮向数据库添加条目时,我需要第二个片段(或应用程序中的第二个页面)来更新屏幕上显示的数据库值列表 以下是数据库列表片段: public class FragManage extends Fragment { private PunchesDataSource datasource; @Override public View onC
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;
}
}
您可以将侦听器与更新片段的主活动一起使用 在带有按钮的框架中添加这些
private void onDBChanged(){
OnDBListener.DBChanged(true);
}
public void setOnDBListener(OnDBListener listener){
this.OnDBListener = listener;
}
public interface OnDBListener{
public void DBChanged(boolean DB_Bool);
}
然后在数据库框架中
public void update(){
adapter.notifyDataSetChanged();
}
然后将侦听器附加到创建碎片的主活动中
ButtonsFragment.setOnDBListener(new OnDBListener() {
@Override
public void DBChanged(boolean DB_Bool) {
DatabaseViewFrag.update();
}
});
在按钮片段调用中更新数据库时
onDBChanged()
要告诉您它已更新的所有内容,以便从FragA->MainActivity->FragB直接与不能是静态的方法(在FragB内)通信,此解决方案应该适合您 它在这里的工作原理: 我在MainActivity.java中添加的代码:
String FragManage;
public void setTabFragManage(String t){
FragManage = t;
}
public String getTabFragManage(){
return FragManage;
}
我在FragPunch.java中添加的代码
public void onClick(View v) {
...
String TabOfFragManage = ((MainActivity)getActivity()).getTabFragManage();
FragManage fm = (FragManage)getActivity()
.getSupportFragmentManager()
.findFragmentByTag(TabOfFragManage);
fm.update(); //This is what is NOT possible before, but now is.
}
我在FragManage.java中添加的代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
String myTag = getTag();
((MainActivity)getActivity()).setTabFragManage(myTag);
...
}
我正在尝试实施您的解决方案,但遇到了一些问题。onDBChanged()是否应该是DBChanged()?另外,fsChanged(true)代表什么/应该做什么?谢谢你花时间来帮助。抱歉,伙计,我有一个输入错误:P我已经修复了代码并添加了我忘记的其余部分。好的,我还有一个问题,我如何访问
适配器。notifyDataSetChanged()?我尝试过这样做:((BaseAdapter)((ListView)getActivity().findViewById(R.id.list)).getAdapter()).notifyDataSetChanged()
,但它说方法update()不能是静态的。方法update()是静态的,因为FragManage.update()
。嘿,伙计,谢谢你的帮助,但是我无法让处理程序解决这个问题。幸运的是,我找到了另一个使用独特片段方法的解决方案。如果需要,请查看我的解决方案。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
String myTag = getTag();
((MainActivity)getActivity()).setTabFragManage(myTag);
...
}