1

如果我的问题似乎很常见,我很抱歉。我有谷歌,有很多结果,但我都不能申请。

我有一个使用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片段。

谢谢 :)

4

1 回答 1

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();
        }
     }
[...]
}
于 2013-03-29T20:47:20.113 回答