Android:在Fragment中刷新GridView

时间:2013-03-29 20:33:44

标签: android

如果我的问题看起来很常见,我很抱歉。我有谷歌并且有很多结果,但我都不能申请。

我有一个使用GridView layout的片段。我还使用BaseAdapter作为gridview。

当数据发生变化时,我会调用gridView.invalidateViews();,但gridview不会重新绘制新数据。

gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                               getTable(position).setStatus("busy");   // change data 
                               gridView.invalidateViews(); // and redraw
                }

或者,我采取另一种方式:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.waiter_view_fragment, container, false);

    gridView = (GridView) (rootView).findViewById(R.id.waiterGridView);
    gridView.setAdapter(new ImageAdapterHost(this, getActivity())); 
        // Add this line here
        ((BaseAdapter)gridView.getAdapter()).notifyDataSetChanged();
    }

答案仍然是一样的。我的gridview没有重新绘制,但是当我测试数据时,数据确实发生了变化,但是没有更新我的gridview。

请教我如何在数据更改后重绘gridview片段。

谢谢:)

1 个答案:

答案 0 :(得分:1)

将您的适配器保留为Fragment中的局部变量,向Fragment中添加一个调用my_adapter_variable.notifyDataSetChanged()的方法。 更改数据后,找到您的片段并调用该方法。这样的事情对我有用:

public void gotLessonDetails(LessonDetailsEvent event)
{
[...]
    for (String tag: tabs) {
        StudentListFragment f = (StudentListFragment) getSupportFragmentManager().findFragmentByTag(tag);
        if (f != null) {
            f.refreshAdapter();
        }
     }
[...]
}