如何从适配器调用ListFragment中定义的方法?

我有一个ListFragment和一个自定义适配器

从适配器,我从行中定义的button中获取onClick事件。 在onClick方法中,我得到一些id,我想传递给ListFragment做一些事情。

我怎样才能从适配器的ListFragment调用方法showTask?

listfragment

 public class TaskListFragment extends ListFragment{ /* ... */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new TaskListAdapter(getActivity(), data); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setListAdapter(mAdapter); } public void showTask(long id) { FragmentTransaction ft = getFragmentManager().beginTransaction(); TaskFragment taskFragment = new TaskFragment(); Bundle args = new Bundle(); args.putLong("id", id); taskFragment.setArguments(args); ft.replace(R.id.fragment_container, taskFragment); ft.commit(); } } 

适配器

 public class TaskListAdapter extends ArrayAdapter<Task>{ /* ... */ private OnClickListener mOnClickListener = new OnClickListener() { @Override public void onClick(View v) { long id = (Integer) v.getTag(); // how can I call showTask(id) ? } }; } 

  • android viewpager更改适配器
  • 与AdapterView和addView的麻烦
  • 创build适配器到自定义视图
  • 列出具有交替颜色的项目
  • 如何完成一个ListView适配器类的活动?
  • 如何在Android中实现无尽的画廊?
  • ListView和variables高度的项目会导致滚动问题
  • 带光标的ViewPager PagerAdapter - CursorLoader.onLoadFinished不会被不同的查询调用
  • 一个常见的解决scheme是适配器是片段的内部类,所以它可以直接调用该方法。

    或者,通过其构造函数将片段(或片段实现的某个接口)传递给适配器。

    像这样创build你的适配器:

     @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new TaskListAdapter(getActivity(), data, TaskListFragment.this); } 

    这将改变你的适配器构造函数为:

     public TaskListAdapter(Context context, List<Task> data, TastListFragment fragment) { this.fragment = fragment; } 

    现在,你有一个指向你的TaskListFragment的对象:

     private OnClickListener mOnClickListener = new OnClickListener() { @Override public void onClick(View v) { long id = (Integer) v.getTag(); fragment.showTask(id); } };