java - 从适配器调用 fragment 方法

标签 java android android-fragments

我的 fragment 中有一个方法 sendData()。此方法启动一个新的 Activity。我想从我的 ArrayAdapter 调用这个方法。

这是我的代码:-

HomeFragment.java

stagAdaper = new StaggeredAdapter(myContext, android.R.layout.simple_list_item_1, getList);
            mGridView.setAdapter(stagAdaper);
    private void sendData(int position)
    {

        myDialog = new ProgressDialog(myContext).show(getActivity(), "Fetching news..", "Just a moment");

        myDialog.getWindow().setContentView(R.layout.openarticlewaitprogress);
        myDialog.getWindow().setTitle("Loading..");
        myDialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
         new  NewsDetails(myDialog);



            Intent nIntent = new Intent(getActivity(),Details.class);

               String Body=getList.get(position).getBody();

            newsIntent.putExtra("Body", Body);


            startActivity(nIntent);

    }

交错适配器.java

viewHolder.layGridLayout.setOnClickListener(new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            //viewHolder.layGridLayout.setForeground(R.drawable.foreground_selector);

        }
    });
    return convertView;
    }

我该怎么做?

最佳答案

编辑: 这是我现在要使用的。下面提供了较旧的“更简单”的解决方案。

MyFragment extends Fragment implements CustomAdapter.EventListener {

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        CustomAdapter adapter = new CustomAdapter(..., this);

    }

    void onEvent(int data) {
        doSomething(data);
    }

}

CustomAdapter extends BaseAdapter {

    EventListener listener; 

    public interface EventListener {
        void onEvent(int data);   
    }

    public CustomAdapter(..., EventListener listener) {
        this.listener = listener; 
    }

    ...

}

现在,我们可以从适配器中的任何位置调用 listener.onEvent(data); 来触发 fragment 中的方法。

此外,我们可以在适配器中添加另一个方法,例如 registerListener(EventListener eventListener),而不是通过构造函数提供监听器,然后在需要时维护监听器列表。

旧答案:

解决方案 1: 使适配器成为 fragment 的内部类,以便您可以直接调用该方法。

解决方案 2: 更新您的适配器构造函数以接受 Fragment 作为参数。

类似:

customAdapter = new CustomAdapter(myContext, android.R.layout.simple_list_item_1, getList, HomeFragment.this);

并更新适配器的构造函数:

public CustomAdapter(Context context, int id, HomeFragment fragment) {
    this.fragment = fragment;
}

然后您使用 fragment 变量调用方法。

fragment.doSomething();

关于java - 从适配器调用 fragment 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24502394/

相关文章:

android - 在相对布局的中心查看

android - 数据绑定(bind)、TabLayout 和 “No view found for id for fragment”

java - 如何在一个命令中处理不同的语句?

java - 如何在 MockRestServiceServer 中验证 json 请求正文

java - Android 地磁场不工作

java - Mapbox Directions API Android 不工作

Java JTable/DefaultTableModel java.lang.ArrayIndexOutOfBoundsException

java - 为什么主线程在这里没有被抢占?

android - 关于 inflater.inflate Android 文档的混淆

android - ViewFlipper 与 fragment