Search code examples
androidhorizontalscrollviewandroid-inflate

android - add n number of views in scroll view


i am designing an app for android tablets. I have created a layout file which contains the application bar, next is some buttons. In the middle of the screen i want to have a horizontal scroll view inside which i need to show some images.

The number of images inside the scroll view depends upon the return data from the url. For this i am maintaining an array list. According to the size of the array i need to create the image views withing the scroll view.

I have placed all other buttons, textviews in the layout file and i need to make the above said view alone through coding, how to do this.

If the array size is 19, then the list of images within scroll view to be shown in the following order only

1  4  7  10  13  16  19
2  5  8  11  14  17    
3  6  9  12  15  18      

In iPad iBook apps library page, the books will be listed out in this way.

how to do this....


Solution

  • Thanks to Dheeresh Singh

    Following is my main.xml file

    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
            <LinearLayout
                android:id="@+id/linear_1"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="horizontal" >
            </LinearLayout>
    </HorizontalScrollView>
    

    i have my Horizontal scroll view in my main.xml file

    public class LayoutActivity extends Activity 
    //implements OnClickListener
    {
        ViewGroup layout;
        LinearLayout lr;
    
        int x;
        int total = 4;
        int count = 0;
        LinearLayout lay;
    
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            count = 0;
            layout = (ViewGroup)findViewById(R.id.linear_1);
            x = (total/3)+(total%3 > 0?1:0);;
            for(int i = 0; i < x; i++)
            {
                lr = new LinearLayout(this);
                lr.setOrientation(LinearLayout.VERTICAL);
                layout.addView(lr);
                for(int j = 0; j < 3; j++ )
                {
                    count++;
                    final View child = getLayoutInflater().inflate(R.layout.inflateview, null);
                    lay = (LinearLayout)child.findViewById(R.id.threeByThree_tableRow1_1_Layout1);
                    lay.setOnClickListener(new View.OnClickListener() 
                    {   
                        @Override
                        public void onClick(View v) 
                        {
                            Toast.makeText(getApplicationContext(), "selected  id  is "+child.getId(), Toast.LENGTH_SHORT).show();
                        }
                    });
                    lr.addView(child);
                    child.setId(count);
                    if(i == total)
                    {
                        break;
                    }
                }
            }      
        }
    }
    

    in the above code i have lr is the LinearLayout to display it in vertical order and View child is the data which i need to show in both vertical and horizontal order.

    Thanks a lot Dheeresh Singh