in my Android app I have this class called "TripleTab2". TripleTab2 is a fragment that is called as part of a tabbed activity.
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;
}
The following line of code causes a problem (NullPointerException):
chosenSMSContacts = getArguments().getStringArrayList("numbersToMove");
createTextViews();
Actually, that makes sense, because the actvity-class called "ChooseSMSContactActivity"
(which sends this data) is called after the tripleTab2-class
.
Here it is:
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);
}
}
}
}
});
}
So, TripleTab2 does not have this data on creation, because it is called before ChooseSMSContactActivity
.
Does anyone have suggestions on how to resolve this problem? Should I use a BroadcastReceiver or something like that?