繁体   English   中英

从适配器调用Fragment方法

[英]Call a Fragment method from an Adapter

我的片段中有一个方法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);

    }

StaggeredAdapter.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); 触发片段中的方法。

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

旧答案:

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

解决方案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();

我知道现在回答已经很晚了,但还有两种方法可以做到:

  1. 您也可以从adapter发送broadcast并将其注册为fragment

  2. 使用界面。 有关详细信息,请参阅问题。

您可以将sendData方法设置为静态

public static void sendData(int position)
{
     ......
}

n称之为

@Override
public void onClick(View v) 
{
     // TODO Auto-generated method stub
     HomeFragment.sendData(position)
     ........    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM