我不明白这里的背景

时间:2019-08-13 13:39:48

标签: android

我正在研究一个应用,其中两个片段通过接口在MainActivity中进行通信。如果我们在FirstFragment中写一些东西 SecondFragment显示FirstFragmentListener是在MainActivity中实现的接口。

这是第一段代码中引起我困惑的部分

    package mchehab.com.fragmentscommunication;

    import android.content.Context;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.EditText;


    public class FirstFragment extends Fragment {

        private EditText editText;
        private Button buttonSendMessage;
        private FirstFragmentListener firstFragmentListener;

        public FirstFragment() {
            // Required empty public constructor
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_first, container, false);
            editText = view.findViewById(R.id.editText);
            buttonSendMessage = view.findViewById(R.id.buttonSendMessage);

            buttonSendMessage.setOnClickListener(e -> {
                if(firstFragmentListener != null){
                    firstFragmentListener.getMessage(editText.getText().toString());
                }
            });
            return view;
        }

        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            if(context instanceof FirstFragmentListener){
                firstFragmentListener = (FirstFragmentListener) context;
            }
        }
    }


    @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            if(context instanceof FirstFragmentListener){
                firstFragmentListener = (FirstFragmentListener) context;
            }
        }

我所理解的上下文是活动的上下文,在本例中为MainActivity。

firstFragmentListener = (FirstFragmentListener) context;

,但是为什么他们要在此行中投放上下文。 他们为什么需要那个?

2 个答案:

答案 0 :(得分:0)

我怀疑MainActivity如下:

public class MainActivity extends Activity implements FirstFragmentListener {...}

,他们需要这个FirstFragmentListener。为了您的理解,完整的代码可以是:

MainActivity mainActivity = (MainActivity) context
firstFragmentListener = (FirstFragmentListener) mainActivity

答案 1 :(得分:0)

在这种情况下,MainActivity实现了FirstFragmentListener,因此当您将上下文转换为FirstFragmentListener时,可以使用此接口中的方法。 这是一种旧的(目前已经过时)的方法。

使用共享的ViewModel在片段之间进行通信。参见:https://developer.android.com/topic/libraries/architecture/viewmodel.html#sharing