1

This is driving me a little mad since I know this should be very simple but I am not getting the desired affect.

I have the following arraylist

private List<String> tagStringArray = new ArrayList<>();

Then later I have a method that creates dynamic buttons, based on ID values pulled across from my Retrofit instance.

In my method, I have a count to help me set the title of the button but I also add the values of count to an ArrayList for use in another method.

I have taken a snip of relevant information from the method mentioned.

count = 1;


    if (!questionNumber.equals("") && !questionNumber.equals(null)) {

        for (final Object value : list) {

            try {

        /*Dynamically create new Button which includes the question number
          */
                final AppCompatButton btn_question = new AppCompatButton(getActivity());



        /*LayoutParams (int width, int height,float weight)
        As LayoutParams is defaulted in px, I have called a method called dpToPX to make sure
        the dynamically added EditText is the same size on all devices.
         */
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dpToPx(280), dpToPx(45), 1);
                btn_question.setBackgroundColor(Color.parseColor("#3B5998"));
                btn_question.setTextColor(Color.WHITE);
                btn_question.setText("Question "+count);
                //set the Tag based on its position in the XML
                tagStringArray.add(String.valueOf((count)));
                count++;

If a user clicks on say Question 1 Button, I want my fragment to say Question 1, so to try and achieve that, I have tried doing the following:

String tags = String.valueOf(tagStringArray);
     tags = tags.substring(1, tags.length() -1);
     String[] currentTag = tags.split(",");

 if (currentTag[0].contains("1")) {
        tv_setQuestions_edit.setText("Question 1");
    }else if(currentTag[1].contains("2")) {
        tv_setQuestions_edit.setText("Question 2");
    }

But this will always set the title to Question 1 and I am not sure what is going wrong.......

If I use the following toast Toast.makeText(getActivity(), Arrays.toString(currentTag), Toast.LENGTH_LONG).show(); it shows [1,2] so I know they are being added ok.

I did look into using tags by doing:

 public static int KEY_COUNT=0; public static int KEY_VALUE=1;

 btn_question.setTag(KEY_VALUE,value);
 btn_question.setTag(KEY_COUNT,count);

But for some reason, when I add more than one tag (as I need a minimum of 2), my dynamic button is missing from the layout. But for some reason when only 1 tag - like this btn_question.setTag(value); is used, it shows up fine (I have a feeling its some issue with my fragment). Therefore I am trying to think of a workaround in the meantime.

Any help or guidance would be really appreciated.

0

1 Answer 1

2

It's because

currentTag[0].contains("1")

is always true. The first item of currentTag always contains "1".

Instead of doing this, why don't you just do String titleForFragment = myButton.getText() in the onClick method for the button? That way, you can set the same onClickListener on all the buttons, and it will reduce the amount of code you need to write.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you so much - I know I was making this harder than it needed to be! Your solution works perfectly.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.