我有一个ListFragment
和一个自定义适配器。
从适配器中,我从行中定义的按钮获取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) ?
}
};
}
答案 0 :(得分:16)
一个常见的解决方案是将适配器作为片段的内部类,因此它可以直接调用该方法。
或者,通过其构造函数将片段(或片段实现的某些接口)传递给适配器。
答案 1 :(得分:15)
像这样创建你的适配器:
@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);
}
};