Ho uno ListFragment
e un adattatore personalizzato.Come chiamare un metodo definito in un ListFragment da un adattatore?
Dall'adattatore viene visualizzato l'evento onClick
da un pulsante definito nelle righe. Nel metodo onClick
ottengo qualche ID, che mi piacerebbe passare allo ListFragment
per fare qualcosa.
Come posso chiamare il metodo showTask nel numero ListFragment
dall'adattatore?
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();
}
}
adattatore
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) ?
}
};
}
Perché il tuo metodo onClick nell'adattatore non è nell'attività? –
Lascia che il tuo frammento implementa l'interfaccia 'IShowTask' (che ha il metodo' showTask'), quindi lascia che l'adattatore abbia il metodo 'setShowTaskListener (IShowTask)' ... quindi ... tu sei il programmatore, vero? :) – Selvin
Ho postato una risposta nel modo che preferisci, ma non devi creare 'OnClickListeners' per ogni vista. Dovresti considerare di inserire un 'OnListItemClickListener' sul tuo' ListView'. – tolgap