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

标签 android adapter

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

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

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

列表 fragment

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) ?
        }
    };
}

最佳答案

一个常见的解决方案是将适配器作为 fragment 的内部类,这样它就可以直接调用该方法。

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

关于android - 如何从适配器调用 ListFragment 中定义的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15160958/

相关文章:

android - AppCompatDialog 与 DialogFragment

android - DialogPreference 的自定义属性

android - html5 要求不能在 android 2.1 上工作

laravel - 在 Laravel 中使用第 3 方 API 和创建域时使用适配器模式

Android Gallery View 和适配器 getView 被多次调用

android - 崩溃 : Thread libffmpeg. 所以(缺失)

android - 如何消除android layout.xml中的warning : "missing contentDescription"

jquery-mobile - jquery mobile 和 angular.js -> 可折叠似乎不起作用

android - ListView 中的重复数据?

安卓初学者 : Adapter for simple view or direct DB query?