我有一个活动和三个片段。应用程序启动,片段1可见。我点击一个按钮。该片段通过以下接口与活动通信,并启动片段2:
public OnClickedListener listener;
static interface OnClickedListener{
public void buttonClicked(View v);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity a;
if (context instanceof Activity){
a=(Activity) context;
this.listener = (OnClickedListener)a;
}
}..。
playBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.buttonClicked(v); } });
我的MainActivity实现了Fragment1.OnClickedListener,接收数据并启动片段2。
现在我在片段2中。我想点击一个按钮并启动片段3。我知道我可以通过在片段2中实现另一个接口来实现这一点,然后与活动通信,并说“嗨,启动片段3”。所以现在我的活动是这样的
MainActivity implements Fragment1.OnClickedListener,Fragment2.OnClickedListener
这很好,但假设我有20个碎片。我不希望在我的主要活动中实现20个接口。是否有一种方法来创建和使用单个接口在每个单独的片段和活动之间进行通信。这将如何实施?谢谢。
发布于 2017-05-01 17:21:46
你可以的。只创建一个接口(我建议您在一个单独的文件中创建它):
interface OnClickedListener {
void buttonClicked(Fragment fragment, View v);
}当单击一个onButtonClicked()时,Fragment方法也接受Button实例:
playBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// You can't use just "this", pass the class instance.
listener.buttonClicked(MyFragmentClassName.this, v);
}
});在您的Activity中,您将得到这样的结果:
public class MainActivity extends Activity implements MainActivity.OnClickedListener {
@Override
public void buttonClicked(Fragment fragment, View v) {
// Check if the Fragment instance, or tag, or the info that you use to recognize it.
}
}发布于 2017-05-01 17:32:05
在活动或单独文件中创建一个嵌套接口,而不是在片段中创建嵌套接口。
https://stackoverflow.com/questions/43723134
复制相似问题