我有一个活动和三个碎片。应用程序启动,Fragment 1可见。我点击一个按钮。 Fragment通过以下接口与Activity通信并启动Fragment 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,接收数据并启动Fragment 2.
现在我在片段2中。我想点击一个按钮并启动片段3.我知道我可以通过在片段2中实现YET ANOTHER接口然后与Activity进行通信并说出&# 34;嘿发射片段3"。所以现在My Activity看起来像这样
MainActivity implements Fragment1.OnClickedListener,Fragment2.OnClickedListener
这一切都很好但是我们说我有20个碎片。我不希望在我的主要活动中实现20个接口。有没有办法创建和使用单个界面在每个单独的片段和活动之间进行通信。如何实施?谢谢。
答案 0 :(得分:0)
你可以。仅创建一个界面(我建议您在单独的文件中创建它):
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.
}
}
答案 1 :(得分:0)
在Activity或单独的文件中创建一个嵌套接口,而不是在Fragments中创建嵌套接口。