Java 如何使用接口在两个活动之间创建简单的桥梁?

Java 如何使用接口在两个活动之间创建简单的桥梁?,java,android,interface,observer-pattern,Java,Android,Interface,Observer Pattern,我正在努力学习如何在我的android JAVA代码中使用接口。我创建了这个简单的应用程序,希望在MainActivity中单击按钮时显示toast,但我希望通过界面和SecondActivity来实现这一点……但我无法完成任务……因为在执行其onCreate方法时,调试器会将SecondActivity中的接口实例显示为null 显然,这个逻辑是不对的,但我无法准确地找出错误所在……我正在自学,非常感谢您的帮助 我是一个完全的初学者,所以,请善待我 此外,我还包含了以下所有代码: 公共类Ma

我正在努力学习如何在我的android JAVA代码中使用接口。我创建了这个简单的应用程序,希望在MainActivity中单击按钮时显示toast,但我希望通过界面和SecondActivity来实现这一点……但我无法完成任务……因为在执行其onCreate方法时,调试器会将SecondActivity中的接口实例显示为null

显然,这个逻辑是不对的,但我无法准确地找出错误所在……我正在自学,非常感谢您的帮助

我是一个完全的初学者,所以,请善待我

此外,我还包含了以下所有代码:


公共类MainActivity扩展了AppCompatActivity实现接口{

Button myButton;
Intent mainIntent;
SecondActivity myMain2;

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

    myButton = findViewById(R.id.button);

    myMain2 = new SecondActivity();
    myMain2.setMyInterface(this);

    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mainIntent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(mainIntent);
        }
    });
}

@Override
public void showOnClick() {
    Toast.makeText(myMain2, "Clicked!", Toast.LENGTH_SHORT).show();
}
void showOnClick ();
}


公共接口{

Button myButton;
Intent mainIntent;
SecondActivity myMain2;

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

    myButton = findViewById(R.id.button);

    myMain2 = new SecondActivity();
    myMain2.setMyInterface(this);

    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mainIntent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(mainIntent);
        }
    });
}

@Override
public void showOnClick() {
    Toast.makeText(myMain2, "Clicked!", Toast.LENGTH_SHORT).show();
}
void showOnClick ();
}


公共类SecondActivity扩展了AppCompatActivity{

private Interface myInterface;

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

    if (myInterface != null) {
        myInterface.showOnClick();
    }
}

public void setMyInterface(Interface myInterface){
    this.myInterface =  myInterface;
}
}


提前谢谢

编辑(1):



公共类WorkoutListFragment扩展ListFragment{
public WorkoutListFragment(){}
私有接口侦听器;
公共void setListener(MyInterface MyInterface){
this.listener=myInterface;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
String[]name=新字符串[Workout.workouts.length];
for(int i=0;i


我只是指定你做错了什么

myMain2 = new SecondActivity();
myMain2.setMyInterface(this);
您为myMain2设置了界面,但当Android按钮中的ShowActivity未显示您的myMain2时,将根据您传递的意图创建SecondActivity的新实例。这意味着当SecondActivity调用onCreate时,它没有myInterface的实例


基本上,2个活动之间的通信应该使用startActivityForResult,或者使用广播或事件总线模式的一些特殊情况

这有助于理解为什么在启动第二个活动时“myInterface”实例为空,但我仍然不知道如何修复它……请您进一步说明?不过,谢谢。简单的交流,您可以在传递给MainActivity的SecondActivity中执行一些操作和事件,无需立即从MainActivity显示Toast。从按钮开始第二个活动时,尝试了解startActivityForResult。在SecondActivity中,完成后不要忘记调用setResult和finnish()。我已经说过一些特殊情况,当你想立即传递数据时,你可以使用广播或事件总线库。我知道这个例子是为了你的学习,如果你告诉我你到底想做什么,我会给你特别推荐!我将学习startActivityForResult……,然后再试一次……|但我还有一个问题与此相关,我创建了一个片段,它在其onAttach()方法中将自身绑定到一个接口,但我不明白它到底是如何工作的……。以下是我没有得到的行://public void onAttach(上下文){this.listener=(listener)context;//listener是接口,listener是我片段中listener的实例。好的,让我解释一下,您想知道为什么片段可以将其用于活动,而两个活动不正确?
myMain2 = new SecondActivity();
myMain2.setMyInterface(this);
mainIntent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(mainIntent);