Java 使用一个接口管理多个片段
我有一个活动和三个片段。应用程序启动,片段1可见。我点击一个按钮。片段通过以下接口与活动通信,并启动片段2:Java 使用一个接口管理多个片段,java,android,android-fragments,Java,Android,Android Fragments,我有一个活动和三个片段。应用程序启动,片段1可见。我点击一个按钮。片段通过以下接口与活动通信,并启动片段2: public OnClickedListener listener; static interface OnClickedListener{ public void buttonClicked(View v); } @Override public void onAttach(Context context) { super.onAttach(context);
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(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
监听器。按钮点击(v);
}
});代码>
我的MainActivity实现Fragment1.OnClickedListener,接收数据并启动Fragment2
现在我在片段2中。我想点击一个按钮并启动Fragment 3。我知道我可以通过在片段2中实现另一个接口来做到这一点,然后与活动通信并说“嘿,启动片段3”。现在我的活动是这样的
main活动实现Fragment1.OnClickedListener、Fragment2.OnClickedListener
那很好,但假设我有20个碎片。我不想在我的主要活动中实现20个接口。是否有一种方法可以创建和使用单个接口在每个片段和活动之间进行通信。这将如何实施?谢谢。你可以。仅创建一个接口(我建议您在单独的文件中创建):
单击按钮时,onButtonClicked()
方法也接受片段
实例:
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);
}
});
在您的活动中
您将有:
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.
}
}
在活动或单独的文件中创建一个嵌套接口,而不是在片段中创建嵌套接口 我有点困惑。我创建了一个名为OnClickedListener的单独接口。我在Fragment1中扩展了它,并且能够在单击按钮时获取数据:listener.buttonClicked(MyFragmentClassName.this,v);我现在如何将其纳入我的主要活动?您在上面写道,我的主要活动应该如下所示:公共类MainActivity扩展活动实现MainActivity.OnClickedListener。我不确定您在这里实现了什么?正如@mikhail所说的,在另一个文件中声明接口或将其嵌套在MainActivity中。
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.
}
}