我们在活动布局中有一个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监听器中调用片段的方法?
谢谢,并且对于冗长感到抱歉。
答案 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();
更新片段视图。