如果我的问题看起来很常见,我很抱歉。我有谷歌并且有很多结果,但我都不能申请。
我有一个使用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片段。
谢谢:)
答案 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();
}
}
[...]
}