android - 在 fragment 外执行 adapter.notifyDataSetChanged()

标签 android listview adapter

我有一个 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/

相关文章:

Android Listview 项目删除

Android - 将布局 View 添加到 ListView

android - 比较日期值

android - SupportMapFragment 不支持 AndroidX Fragment

android - 我怎样才能在 icon 和 editText 下有一条长线,并在 editText 的末尾留出一些空间?

java - 如何在 onbackpressed() 时刷新 fragment 中的 ListView

android - 如何在 android 中为列表适配器使用 Notifydatasetchanged

android - <androidx.fragment.app.FragmentContainerView> 与 <fragment> 作为 NavHost 的 View

带有 dtd 声明的 Android lint.xml 文档类型

android - 如何让一个 android ListView 项目选择器使用 state_checked