java使用来自不同类的OnClick
这可能很简单,但我还是个初学者 我在MainActivity类中有一个按钮,我想在另一个类(另一个活动)中使用onclick方法。我知道,通过将其公开为静态并将其作为实例访问,可以很容易地实现这一点,但在我的情况下,由于某些好的原因,我无法将其公开为静态
按钮xml:
<Button
安卓:id="@+id/googledrivemain"
安卓:layout_width="78dp"
安卓:layout_height="77dp"
安卓:layout_marginTop="149dp"
安卓:background="@drawable/google"
安卓:onClick="onClickOpenFile"
安卓:paddingTop="6dp"
安卓:textColor="#fff"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView3"
app:layout_constraintHorizontal_bias="0.51" />
主活动按钮:
public void onClickCreateFile(View view) {
fileOperation = true;
// create new contents resource
Drive.DriveApi.newDriveContents(mGoogleApiClient)
.setResultCallback(driveContentsCallback);
}
二等按钮:
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity main = new MainActivity();
use onclick from mainactivity...??
}
});
# 1 楼答案
只需将从
MainActivity.onClickCreateFile()
调用的代码包装到另一个类中,并从任何地方调用它永远不要,永远不要,做像
new MainActivity()
这样的事情。活动由系统管理# 2 楼答案
不能将click方法设置为静态的原因是,1)XML操作需要
public void
和2)您正在单击的视图属于活动的实例,而不是类你可以做一个这样的静态方法
但是,您仍然需要对
GoogleApiClient
对象的引用因为没有客户机绑定到任何一个活动,所以可以将其移动到单例中,以便从任何地方访问一个客户机实例
比如
如果您可以访问第二个类中的Google客户端,只需直接传入API客户端对象
或者,抽象到一个级别,您可以提供一个
Context
,然后重新构建客户机使用这种方法,我们假设第二个类是另一个没有自己的Google客户端的活动
# 3 楼答案
像这样做
我认为它会奏效
# 4 楼答案
您可以创建一个处理程序类,如下所示:
然后,无论你在哪里需要它: