Android 使用提供程序刷新列表

Android 使用提供程序刷新列表,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,导言 我正在使用一个数据库和一个ContentProvider来填充一个ListFragment。问题是ListFragment在我删除一个项目后没有得到刷新,我必须关闭并重新打开应用程序才能在列表中显示添加的项目 我以前做得很好,但在代码中做了修改之后,这种情况开始发生,我不知道如何解决 原因说明 在我的主要活动中,我通过intent调用ListFragment。由于不能通过意图直接调用片段,因此我调用FragmentActivity,其功能仅用于启动ListFragment [Main] &

导言

我正在使用一个数据库和一个ContentProvider来填充一个ListFragment。问题是ListFragment在我删除一个项目后没有得到刷新,我必须关闭并重新打开应用程序才能在列表中显示添加的项目

我以前做得很好,但在代码中做了修改之后,这种情况开始发生,我不知道如何解决

原因说明

在我的主要活动中,我通过intent调用ListFragment。由于不能通过意图直接调用片段,因此我调用FragmentActivity,其功能仅用于启动ListFragment

[Main] >> [FragmentActivity] >> [ListFragment]
由于我必须处理单窗格或双窗格,我创建了一个包含片段的布局,这称为
list\u布局

碎片活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_layout);
    //...

    if (mDualPane){
        MyPlacesListFragment listFragment = new MyPlacesListFragment();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.list_fragment, listFragment).commit();
    }
    else {
        MyPlacesListFragment listFragment = new MyPlacesListFragment();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(android.R.id.content, listFragment).commit();
    }
}
final class PlacesCursorAdapter extends ResourceCursorAdapter {
    private final LayoutInflater mInflater;

    public PlacesCursorAdapter(Context context, Cursor c) {
        super(context, android.R.layout.simple_list_item_2, c, 0);
        //...

    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        View view = mInflater.inflate(android.R.layout.simple_list_item_2, parent, false);
        //...
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_layout);

    MyPlacesListFragment listFragment = new MyPlacesListFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.list_fragment, listFragment).commit();
}
list_layout.xml:(对于单窗格视图,对于双窗格视图将类似,但为水平方向,并添加Framelayout容器)

结论

之前我没有设置
setContentView(R.layout.list\u布局)在FragmentActivity中,它在我删除一个项目时进行了正确的刷新

但由于我必须处理单窗格或双窗格,我被迫这样做,现在,当我删除一个项目时,列表会刷新,但因为它包含在FragmentActivity的
列表布局中,并且在我退出并再次输入该活动之前不会刷新,所以列表不会在其中刷新


因此,我的问题是:如何修改此代码以在不退出ListFragment的情况下刷新布局?

修改数据后,调用adapter.notifyDataSetChanged(),它将刷新数据,正如我在帖子中所说的,我知道它与布局有关。我刚刚修改了
列表布局
和我在
碎片活动
中调用它的方式,它又开始工作了

碎片活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_layout);
    //...

    if (mDualPane){
        MyPlacesListFragment listFragment = new MyPlacesListFragment();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.list_fragment, listFragment).commit();
    }
    else {
        MyPlacesListFragment listFragment = new MyPlacesListFragment();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(android.R.id.content, listFragment).commit();
    }
}
final class PlacesCursorAdapter extends ResourceCursorAdapter {
    private final LayoutInflater mInflater;

    public PlacesCursorAdapter(Context context, Cursor c) {
        super(context, android.R.layout.simple_list_item_2, c, 0);
        //...

    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        View view = mInflater.inflate(android.R.layout.simple_list_item_2, parent, false);
        //...
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_layout);

    MyPlacesListFragment listFragment = new MyPlacesListFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.list_fragment, listFragment).commit();
}
list_layout.xml:(对于单窗格视图,对于双窗格视图将类似,但为水平方向,并添加Framelayout容器)



您发布了很多不相关的代码,但没有发布重要内容:ContentProvider和如何删除item@pskink正如我所说,contentProvider的代码是可以的。我以前使用过它,并且它的功能正确。自从我声明了
列表布局以来,它就开始出错了,所以这不是提供程序方法的问题,而是布局刷新的问题。我这样做了。同样,这不是提供程序或适配器的问题,而是布局声明的问题。在FragmentActivity上设置的
列表布局
在我退出并再次输入之前不会更新。