另一个布局中的参考视图

时间:2016-07-22 15:21:30

标签: android

这可能吗?我有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

2 个答案:

答案 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();