Android 创建从片段到活动的多个事件回调

Android 创建从片段到活动的多个事件回调,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我能够创建一个从片段到活动的单事件回调。但是,我无法从同一个片段创建两个事件回调。 基本上,我在fragment1布局上有一个按钮,当单击它时,它将在mainactivity中执行某些操作,然后,它会更改在fragment1布局上隐藏按钮,然后我需要将一个布尔值从片段发送到activity,然后启动fragment2 如何在MainActivity中实现第二个回调接口 这是我的密码: 在第1部分: public class Fragment1 extends Fragment{ private

我能够创建一个从片段到活动的单事件回调。但是,我无法从同一个片段创建两个事件回调。 基本上,我在fragment1布局上有一个按钮,当单击它时,它将在mainactivity中执行某些操作,然后,它会更改在fragment1布局上隐藏按钮,然后我需要将一个布尔值从片段发送到activity,然后启动fragment2

如何在MainActivity中实现第二个回调接口

这是我的密码: 在第1部分:

public class Fragment1 extends Fragment{

private static final String TAG = "Fragment1";

Boolean in1, in2;
Button btn1;

ListenerA mListenerA;

public interface ListenerA{
    public void methodA(Boolean in1);
};

ListenerB mListenerB;

public interface ListenerB{
    public void methodB(Boolean in2);
};

@Override
public void onAttach(Context context) {
    super.onAttach(context);

    if(context instanceof ListenerA)
        mListenerA = (ListenerA)context;

    if(context instanceof ListenerB)
        mListenerB = (ListenerB)context;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View myView = inflater.inflate(R.layout.fragment1, container, false);

    btn1 = (Button) myView.findViewById(R.id.btn1_ID);
    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mListenerA.methodA(true);
        }
    });     
    return myView;
}

public void showBtnMethod (Boolean showBtn){
    if (showBtn==false) {
        btn1.setVisibility(View.INVISIBLE);

        mListenerB.methodB(true); //***** problematic line
    }
}
}
下面是主要活动中的代码。请注意,在第一行中,我只能从片段中实现一个方法

public class MainActivity extends AppCompatActivity implements Fragment1.ListenerA {

private static final String TAG = "MainActivity";
public Fragment1 mFragment1;
public Fragment2 mFragment2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction();
        mFragment1 = new Fragment1();
        transaction1.replace(R.id.content_fragment_ID, mFragment1);
        transaction1.commit();
    }
}

// this gets called by ListenerA when click on the button
public void methodA(Boolean in){
    if (in==true){
        Toast.makeText(MainActivity.this, "mMethodA Executed", Toast.LENGTH_SHORT).show();
        triggerShowMethod();
    }
};

private void triggerShowMethod(){
    mFragment1.showBtnMethod(false);
};
// Problematic section is below
public void methodB(Boolean in){
    if (in==true){

        FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction();
        mFragment2 = new Fragment2();
        transaction2.replace(R.id.content_fragment_ID, mFragment2);
        transaction2.commit();
        Toast.makeText(MainActivity.this, "mMethodB Executed", Toast.LENGTH_LONG).show();

    }
};

}

您可以简单地将两个接口合并为一个:

public interface Listener{
    public void methodA(Boolean in1);
    public void methodB(Boolean in2);
};
在你的主要活动中:

public class MainActivity extends AppCompatActivity implements Fragment1.Listener

您的活动未实现ListenerB

public class MainActivity extends AppCompatActivity implements Fragment1.ListenerA, Fragment1.ListenerB {

}

嗨,ElDuderino,我理解但无法实施。我该怎么做?就像你实现ListenerA一样。将其添加到活动中。您可以编写代码的第一行吗?公共类MainActivity扩展AppCompatActivity实现公共类MainActivity扩展AppCompatActivity实现Fragment1.ListenerA,Fragment1.ListenerB。生成失败,出现2个错误:app:CompiledBugJavaWithJavaC失败:app:buildInfoGeneratorDebug失败:生成失败,出现异常。*错误:任务执行失败:应用程序:CompiledBugJavaWithJavaC'>编译失败;有关详细信息,请参阅编译器错误输出。*尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。嗨,Pooya,您的解决方案对于一个片段非常有效。然而,如果我在Fragment2有另一个侦听器,我如何在Mainactivity中实现它?