这可能吗?我有2个活动和2个布局,但我想引用一个属于另一个.xml的视图,而不是当前活动正在膨胀的视图。我该怎么做?
private ChildEventListener pendingListener;
private ChildEventListener matchesListener;
private ChildEventListener alertListener;
private ValueEventListener flightListener;
private ValueEventListener prefsListener;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
bLogout = (Button) findViewById(R.id.bLogout);
bLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
logout();
}
});
}
private void logout(){
if(pendingListener != null){
System.out.println(TAG +" pending listener removed");
mFirebaseRef
.child(FirebaseReference.CHILD_USERS)
.child(CURRENT_USER.getId())
.child(FirebaseReference.CHILD_PENDING).removeEventListener(pendingListener);
}
if(matchesListener != null){
System.out.println(TAG +" accept listener removed");
mFirebaseRef
.child(FirebaseReference.CHILD_USERS)
.child(CURRENT_USER.getId())
.child(FirebaseReference.CHILD_MATCHES).removeEventListener(matchesListener);
}
if(flightListener != null){
System.out.println(TAG + " flight listener removed");
mFirebaseRef
.child(FirebaseReference.CHILD_FLIGHTS)
.child(CURRENT_USER.getId()).removeEventListener(flightListener);
}
if(alertListener != null){
System.out.println(TAG + " alert listener removed");
mFirebaseRef.child(FirebaseReference.CHILD_USERS)
.child(CURRENT_USER.getId())
.child(FirebaseReference.CHILD_ALERTS).removeEventListener(alertListener);
}
if(prefsListener != null){
System.out.println(TAG + " prefsListener removed");
mFirebaseRef.child(FirebaseReference.CHILD_USERS)
.child(CURRENT_USER.getId())
.child(FirebaseReference.CHILD_PREFS).removeEventListener(prefsListener);
}
if(this.mAuthData != null){
mFirebaseRef.removeAuthStateListener(mAuthStateListener);
System.out.println(TAG + " authState listener removed");
}
// After logout, go to main activity
Intent intent = new Intent(MainScreen.this, loginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
该应用程序在.setOnClickListener崩溃。 bLogout的id在另一个布局中定义,而不是main_screen
答案 0 :(得分:0)
如何从Activity2调用Activity1 logout()函数
创建一个调用logout()的广播接收器:
public class YourBroadcastReceiver extends BroadcastReceiver {
//local variables
private Context mContext;
public YourBroadcastReceiver(Context mContext){
this.mContext = mContext;
}
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if(action.equals("LOGOUT")) {
((YourActivity) mContext).logout();
}
}
}
在活动1中注册BroadcastReceiver:
public mYourBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//........
//Create an Intent Filter
final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("LOGOUT");
mYourBroadcastReceiver = new YourBroadcastReceiver(this);
//Register receiver
registerReceiver(mYourBroadcastReceiver, intentFilter);
//.........
}
@Override
protected void onDestroy() {
super.onDestroy();
if (EcologDriverAIDApplication.DEBUG) {
Log.i(TAG, "onDestroy");
}
//Unregister receiver before destroy activity
unregisterReceiver(mYourBroadcastReceiver);
mYourBroadcastReceiver = null;
}
广播注销:
final Intent intent = new Intent("LOGOUT");
sendBroadcast(intent);
希望帮助
答案 1 :(得分:0)
经过进一步的研究,这可以通过公开注销并为我的片段中的bLogout的onClickListener编写以下内容来解决
//call logout in MainScreen
((MainScreen)getActivity()).logout();