如何将附加到一个View(由Adapter生成)的侦听器调用它所属的Fragment的方法?

时间:2016-02-13 02:25:17

标签: android fragment adapter

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

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

片段内部有许多LinearLayouts,嵌套与否。

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

ListView的项目有自己的布局,其中包含许多View,以及一个名为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项。但这不是我们所需要的。

我们真正需要的是调用Fragment的成员方法,然后可以完全重绘GridLayout(通过更改其所有子项的文本)。

所以,最后,问题是:我们如何从ibOK监听器中调用片段的方法?

谢谢,并且对于冗长感到抱歉。

2 个答案:

答案 0 :(得分:0)

你至少有两个我能想到的选择。

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

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

后一种选择引发了其他问题,但如果你走这条路,那就产生了一个完全不同的问题。

答案 1 :(得分:0)

您可以在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 = new yourAdapter(this,your Arguments)

}

我的适应器创建了一个包含所有参数的构造函数并启动了yourListener并从你的按钮监听器调用

yourListener.ibOKClicked();

更新片段视图。