我正在研究一个应用,其中两个片段通过接口在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;
,但是为什么他们要在此行中投放上下文。 他们为什么需要那个?
答案 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