Android 在片段外部执行adapter.notifyDataSetChanged()

Android 在片段外部执行adapter.notifyDataSetChanged(),android,listview,adapter,Android,Listview,Adapter,我有一个片段是数据库值的列表。我正在使用ListView向屏幕显示值 我有另一个片段,其中包含向数据库添加条目的按钮。所以我的问题是,当我通过点击第一个片段上的按钮向数据库添加条目时,我需要第二个片段(或应用程序中的第二个页面)来更新屏幕上显示的数据库值列表 以下是数据库列表片段: public class FragManage extends Fragment { private PunchesDataSource datasource; @Override public View onC

我有一个片段是数据库值的列表。我正在使用ListView向屏幕显示值

我有另一个片段,其中包含向数据库添加条目的按钮。所以我的问题是,当我通过点击第一个片段上的按钮向数据库添加条目时,我需要第二个片段(或应用程序中的第二个页面)来更新屏幕上显示的数据库值列表

以下是数据库列表片段:

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);
    ...
    }