Android 附加到一个视图(由适配器生成)的侦听器如何调用它所属片段的方法?

Android 附加到一个视图(由适配器生成)的侦听器如何调用它所属片段的方法?,android,fragment,adapter,Android,Fragment,Adapter,我们在活动的布局中有一个ViewPager 我们有一个FragmentGenerator类,它为ViewPager适配器生成片段 片段内部有许多线性布局,嵌套或不嵌套 在一个LinearLayout中有一个ListView,它有自己的适配器 ListView的项有自己的布局,它由许多视图和一个名为ibOK的复选按钮组成 当按下ibOK时,必须更新同一片段的其他视图 以下是当前代码: public class cAdaptadorListEntries extends BaseAdapter {

我们在活动的布局中有一个ViewPager

我们有一个FragmentGenerator类,它为ViewPager适配器生成片段

片段内部有许多线性布局,嵌套或不嵌套

在一个LinearLayout中有一个ListView,它有自己的适配器

ListView的项有自己的布局,它由许多视图和一个名为ibOK的复选按钮组成

当按下ibOK时,必须更新同一片段的其他视图

以下是当前代码:

public class cAdaptadorListEntries extends BaseAdapter
{
    //...
    @Override
    public View getView(final int position, View convertView, ViewGroup parent)
    {
    //...
    // inflate item layout and find ibOK checkbox
    //...
    ibOK.setOnClickListener(new View.OnClickListener()
       {
           @Override
           public void onClick(View v)
           {
               ibOK.setSelected(false);
               ibOK.setEnabled(false);
               // do something else
               // cGlobalClass.fDoOtherThingsWithGlobalVars();
               GridLayout gltemp = (GridLayout) ((ViewGroup) (ibOK.getParent().getParent().getParent().getParent())).findViewById(R.id.glMyGrid);
               gltemp.getChildAt(0).setBackgroundColor(Color.BLUE);
            }
        }
    );
//...
}
这段代码非常有效,我们可以成功访问GridLayout项。但这不是我们需要的

我们真正需要的是调用片段的一个成员方法,该方法反过来可以完全重新绘制GridLayout(通过更改其所有子项的文本)

最后,问题是:我们如何从ibOK侦听器调用片段的方法


谢谢,很抱歉说得太多。

我至少可以想到两种选择

您可以在片段中将适配器声明为非静态内部类。这应该允许适配器从包含的片段调用方法

如果这不是一个选项,您可以通过其构造函数将对片段的引用传递给适配器,将片段引用保存在适配器类中,并使用该引用调用片段上的方法


后一个选项会引发其他问题,但如果你走这条路线,就会产生一个与此完全不同的问题。

你可以在你的cAdaptadorListEntries中创建一个侦听器

public interface yourListener{
    void ibOKClicked();
}
使用该侦听器实现您的片段,如

public class yourFragment extands Fragment implements yourListener{


@Override
public void ibOKClicked() {
    // Update your fragments Views
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
//。。。。编写代码并设置适配器,将其作为侦听器传递,以及您需要的其他参数。 yourAdapter=newyourAdapter(这是您的参数)

我可以创建一个包含所有参数的构造函数,初始化你的监听器,并从你的按钮调用监听器

yourListener.ibOKClicked();

更新片段视图。

Tks,我试试。但是我必须在哪里声明接口呢?
yourListener.ibOKClicked();