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