Mam ListFragment
i niestandardowy adapter.Jak wywołać metodę zdefiniowaną w ListFragment z adaptera?
Z adaptera otrzymuję zdarzenie onClick
z przycisku zdefiniowanego w wierszach. W metodzie onClick
dostaję pewien identyfikator, który chciałbym przekazać do ListFragment
, aby zrobić kilka rzeczy.
Jak mogę wywołać metodę showTask w metodzie ListFragment
z adaptera?
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();
}
}
adaptera
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) ?
}
};
}
Dlaczego Twoja metoda onClick znajduje się w adapterze, a nie w działaniu? –
Pozwól swojemu fragmentowi implementować interfejs 'IShowTask' (który ma metodę showTask), a następnie pozwól, aby adapter miał metodę' setShowTaskListener (IShowTask) '... to ... jesteś programistą, prawda? :) – Selvin
Wysłałem odpowiedź tak, jak chcesz, ale nie powinieneś tworzyć "OnClickListeners" dla każdego widoku. Powinieneś rozważyć umieszczenie 'OnListItemClickListener' na twoim' ListView'. – tolgap