1

私の質問が一般的なようでしたら申し訳ありません。私はグーグルを持っていて、多くの結果を持っていますが、どれも適用できません。

を使用するフラグメントがありますGridView layout。グリッドビューにも使用BaseAdapterします。

データが変更されたときに呼び出します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();
    }

答えは同じです。データをテストすると、データは実際に変更されますが、グリッドビューは更新されませんが、グリッドビューは再描画されません。

データ変更後にグリッドビューフラグメントを再描画する方法を教えてください。

ありがとう :)

4

1 に答える 1

1

アダプターを Fragment 内のローカル変数として保持し、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 に答える