Search code examples
javaandroidstringbuttonscrollview

How to add string at the bottom of a ScrollView


I would like to know how to add new strings at the bottom of a ScrollView every time I press a button.

For example at the beginning there is sentence1, press button, then sentence2 is under sentence1, press button, sentence3 is under sentence2, etc

I know how to make a scrollView and I have an array of strings to display:

final int[] sentences = new int[]{
        R.String.sentence1, 
        R.String.sentence1, 
        R.String.sentence2, 
        R.String.sentence3, 
        R.String.sentence4
};

And I know how to make them appear one after another when a button is pressed (kind off replacing the previous one, like a TextSwitch but without the animation) :

if(nextSentenceId < sentences.length) {
   officeOBSDialog.setText(sentences[nextSentenceId]);
   ++nextSentenceId;
}

Do you have any idea how I could manage to do that or what could I use? It occured to me that I could use like a layout inflator but I don't know how to put that to practice and where to put it. Thanks in advance


Solution

  • I recommend you to use ListView or RecyclerView. https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView

    However, if you consistently want to use ScrollView cause your screen UI is simple. You can simply wrap a LinearLayout with vertical orientation by a ScrollView.

    activity.xml

    <ScrollView 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true">
    
        <LinearLayout
            android:id="@+id/lnContainer"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <!-- your button declaration -->
    
        </LinearLayout>
    </ScrollView>
    

    In your activity java file, add new row programmatically by:

    private int position=0;
    final int[] sentences = new int[]{
        R.String.sentence1, 
        R.String.sentence1, 
        R.String.sentence2, 
        R.String.sentence3, 
        R.String.sentence4
    };
    
    //inside onCreate() method
    yourButton.setOnClickListener(new View.OnClickListener(){
         public void onClick(View view){
             TextView textView = new TextView(YourActivityClass.this);
             textView.setText(sentences[position++]);
             ((LinearLayout)findViewById(R.id.lnContainer)).addView(textView);
         }
    });