Это не правильный способ использовать Broadcast. Вы не можете принять трансляцию, так как второй фрагмент еще не запущен. Вам следует перейти ко второму фрагменту, когда вы нажмете кнопку отправки с текстом смс в качестве аргумента.
Попробуй это. У меня это работает:
FirstFragment.java
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
input = user_input.getText().toString();
if (!TextUtils.isEmpty(input)) {
Log.d("SendFrag", "sending : "+input);
// Set data into fragment
ReceiveSmsFragment fragment = new ReceiveSmsFragment();
Bundle arguments = new Bundle();
arguments.putString("sms", input);
fragment.setArguments(arguments);
// Change fragment with argument
FragmentTransaction transaction=getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragcontainer, fragment);
transaction.commit();
} else {
Toast.makeText(getContext(), "Please enter a valid input", Toast.LENGTH_SHORT).show();
}
input = null;
}
});
и SecondFragment.java
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.e("OnCreateView","Called");
view = inflater.inflate(R.layout.receive_sms_frag, container, false);
Bundle arguments = getArguments();
String sms_string = arguments.getString("sms");
if (sms == null) {
sms = new Sms();
}
sms.add(sms_string);
Log.d("ReceiveFrag", "received : "+sms_string);
return view;
}
Наконец, ваш класс смс был странным. Я выкладываю здесь лучшую версию
Sms.java
public class Sms {
private static ArrayList<String> sms_list;
// Sms constructor with no private/public, it's a constructor !
Sms()
{
sms_list = new ArrayList<>();
}
public void add(String sms)
{
sms_list.add(sms);
}
public String get(int position)
{
return sms_list.get(position);
}
public static int getListLength()
{
return sms_list.size();
}
}
Попробуйте это и скажите мне, если это работает:)
Надеюсь, это помогло.