I'm trying to connect TextViews of single words and create multilpe rows of them. In order to determine when to create a new line I need to check the width of the words' TextViews.
Here is a pic that is similar to what im trying to accomplish

I get a weird errors when I try to use getWidth:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.RelativeLayout.getWidth()' on a null object reference However when I debug the code rL2 is not null and has a value.
Im guessing my View hasn't been created yet? But how can I alter it dynamically? How can I make my rows?
Here is my code:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.fragment_call_response, container, false); v.measure(widthMeasureSpec, heightMeasureSpec); int lineWidth = 0; RelativeLayout rL2 = (RelativeLayout) v.findViewById(R.id.row1); int lineCount = 0; int rowWidth = rL2.getWidth(); int wordCountRow = 0; TextView question = (TextView) v.findViewById(R.id.Question); TextView choice1 = (TextView) v.findViewById(R.id.choice1); TextView choice2 = (TextView) v.findViewById(R.id.choice2); TextView choice3 = (TextView) v.findViewById(R.id.choice3); TextView choice4 = (TextView) v.findViewById(R.id.choice4); TextView speaker = (TextView) v.findViewById(R.id.Speaker); TextView progress = (TextView) v.findViewById(R.id.progress); ArrayList<String> answers = new ArrayList<>(); answers.addAll(quote.getAnswerChoice()); answers.add(quote.getWordSplitTypeA().get(quote.getAnswerIndex().get(0))); Collections.shuffle(answers); speaker.setText("How would " + quote.getSpeaker().get(0) + " Marx answer the above question?"); choice1.setText(answers.get(0)); choice2.setText(answers.get(1)); choice3.setText(answers.get(2)); choice4.setText(answers.get(3)); progress.setText(String.format("%.1f%% Complete", (SingletonFactory.getPlayer().getLessonProgress()[0] / 12.0) * 100)); //addTextViews(v); for(int i = 0;i<quote.getWordSplitTypeA().size(); i++) { if (lineWidth + 10 > rowWidth) { lineCount++; wordCountRow = 0; } int padding = getResources().getDimensionPixelOffset(R.dimen.wordBoxPadding); TextView tv = new TextView(getActivity()); tv.setId(i); tv.setText(quote.getWordSplitTypeA().get(i)); tv.setBackgroundColor(Color.parseColor(bGColor)); tv.setTextColor(Color.WHITE); tv.setGravity(Gravity.CENTER); tv.setPadding(padding, padding, padding, padding); ViewGroup.LayoutParams LP = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); tv.setLayoutParams(LP); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) tv.getLayoutParams(); if (wordCountRow == 0) { params.addRule(RelativeLayout.CENTER_VERTICAL); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); params.addRule(RelativeLayout.ALIGN_PARENT_START); } else { params.addRule(RelativeLayout.CENTER_VERTICAL); params.addRule(RelativeLayout.RIGHT_OF, (i - 1)); } tv.setLayoutParams(params); if (quote.getAnswerIndex().contains(i)) { tv.setBackgroundColor(Color.RED); tv.setText("....."); } int width = tv.getWidth(); lineWidth += width; if (lineCount == 0) { RelativeLayout rL = (RelativeLayout) v.findViewById(R.id.row1); rL.addView(tv); } else if (lineCount == 1) { RelativeLayout rL = (RelativeLayout) v.findViewById(R.id.row2); rL.addView(tv); } else if (lineCount == 2) { RelativeLayout rL = (RelativeLayout) v.findViewById(R.id.row3); rL.addView(tv); } else if (lineCount == 3) { RelativeLayout rL = (RelativeLayout) v.findViewById(R.id.row4); rL.addView(tv); } choice1.setOnClickListener(mClickListener); choice2.setOnClickListener(mClickListener); choice3.setOnClickListener(mClickListener); choice4.setOnClickListener(mClickListener); question.setText(quote.getSpeaker().get(0) + ": " + quote.getQuote().get(0)); } return v; }