в моем приложении для Android у меня есть этот класс под названием «TripleTab2».TripleTab2 - это фрагмент, который вызывается как часть действия с вкладками.
public class TripleTab2 extends Fragment {
private TextView nameAndNumberText;
private LinearLayout nameAndNumbersLayoutSMS;
private Map<String, String> nameToNumberMapping;
private View view;
private ArrayList<String> chosenSMSContacts;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.assign_pattern_tab_2, container, false);
nameAndNumberText = (TextView) view.findViewById(R.id.numAndNameView);
nameAndNumbersLayoutSMS = (LinearLayout) view.findViewById(R.id.nameAndNumbersLayoutSMS);
chosenSMSContacts = getArguments().getStringArrayList("numbersToMove");
createTextViews();
for(String chosenSMSContact : chosenSMSContacts){
nameAndNumberText.append(chosenSMSContact);
}
return view;
}
Следующая строка кода вызывает проблему (NullPointerException) :
chosenSMSContacts = getArguments().getStringArrayList("numbersToMove");
createTextViews();
На самом деле это имеет смысл, потому что класс actvity называется "ChooseSMSContactActivity"
(который отправляет эти данные) вызывается после tripleTab2-class
.
Вот оно:
public class ChooseSMSContactActivity extends AppCompatActivity {
private LinearLayout nameAndNumbersLayoutSMS;
private Map<String, String> nameToNumberMapping;
private Button selectedNumberBtn;
private ArrayList<String> selectedNamesAndNumbers;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_smscontact_to_add);
nameAndNumbersLayoutSMS = (LinearLayout) findViewById(R.id.dropDownMenuLayout);
selectedNumberBtn = (Button) findViewById(R.id.selectedNumberBtn);
createCheckboxes();
selectedNamesAndNumbers = new ArrayList<>();
selectedNumberBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for(int i=0; i < nameAndNumbersLayoutSMS.getChildCount(); i++){
if(nameAndNumbersLayoutSMS.getChildAt(i) instanceof CheckBox){
CheckBox checkBox = (CheckBox) nameAndNumbersLayoutSMS.getChildAt(i);
if(checkBox.isChecked()){
selectedNamesAndNumbers.add(checkBox.getText().toString());
Bundle bundle = new Bundle();
bundle.putStringArrayList("numbersToMove", selectedNamesAndNumbers);
TripleTab2 tripleTab2 = new TripleTab2();
tripleTab2.setArguments(bundle);
}
}
}
}
});
}
Итак, TripleTab2 не имеет этих данных при создании, потому что он вызывается до ChooseSMSContactActivity
.
У кого-нибудь есть предложения, как решить эту проблему?Должен ли я использовать BroadcastReceiver или что-то подобное?