2014-02-20 185 views
0

介绍刷新列表

我使用一个数据库和ContentProvider的填充ListFragment。问题是,ListFragment是没有得到刷新删除商品后,我不得不关闭并重新打开该应用显示在列表中添加的项目。

我以前好这方面的工作,但我修改的代码做了之后,这已经开始发生,我不知道如何解决。

是什么原因导致这种

从我的主要活动描述,我通过打电话的意图ListFragment。由于片段不能通过intent直接调用,因此我调用FragmentActivity,该功能仅用于启动ListFragment。

[Main] >> [FragmentActivity] >> [ListFragment] 

正如我要处理单或双窗格中,我创建了contais的片段的布局,这被称为list_layout

FragmentActivity:

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

list_layout.xml:(对于单窗格视图,对于双窗格将是相似的,但在水平方向和添加的FrameLayout容器)

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <fragment 
     class="com.final.reversegeocoding.MyPlacesListFragment" 
     android:id="@+id/list_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

的ListFragment使用ResourceCursorAdapter所以我用newVew和bindView方法。我只会把代码引用到如何夸大类的屁股,我已检查其他代码功能是否做得很好。不得不说,我夸大android.R.layout.simple_list_item_2,因为这是我需要填写列表中的布局。

ListFragment:

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

结论

之前,我我以前不设置在FragmentActivity的setContentView(R.layout.list_layout);,它这样做是正确的刷新时我删除了一个项目。

但由于我必须处理单个或双重窗格,我一直被迫做这个,现在,当我删除一个项目,列表刷新,但因为它包含在FragmentActivity的list_layout,这不是刷新直到我退出并再次进入活动,该列表不会在其内部被刷新。

所以我的问题是:如何修改此代码以获取布局刷新而不必退出ListFragment?

+0

你发布了很多不相关的代码,但没有发布什么重要的:ContentProvider和你如何删除一个项目 – pskink

+0

@pskink正如我所说的,contentProvider的代码是O K.我之前就使用过它,并且它的功能正确。它已经开始做错了,因为我已经声明了'list_layout',所以对提供者的方法不存在问题,这是布局刷新的问题。 – masmic

回答

0

修改数据后,调用adapter.notifyDataSetChanged(),它会刷新你的数据

+0

我这样做。再一次,这不是提供者和适配器的问题,是布局声明的问题。设置在FragmentActivity上的'list_layout'不会更新,直到我退出并再次输入。 – masmic

0

嗯,在我知道它有一些东西要与布局后说。我不得不修改list_layout,我把它叫做上FragmentActivity的方式,它已开始重新工作。

FragmentActivity:

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容器)

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Framelayout 
     android:id="@+id/list_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout>