Android - добавить n количество просмотров в режиме прокрутки

Я разрабатываю приложение для планшетов Android. Я создал файл макета, который содержит панель приложения, а затем несколько кнопок. В середине экрана я хочу иметь горизонтальную прокрутку, внутри которой мне нужно показать некоторые изображения.

Количество изображений внутри прокрутки зависит от возвращаемых данных из URL-адреса. Для этого я поддерживаю список массивов. В соответствии с размером массива мне нужно создать изображения с прокруткой.

I have placed all other buttons, textviews in the layout file and i need to make the above said view alone through coding, как это сделать.

Если размер массива равен 19, то список изображений в прокрутке будет отображаться только в следующем порядке.

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

На странице библиотеки приложений iPad iBook книги будут перечислены таким образом.

как это сделать....


person Siva K    schedule 15.06.2012    source источник
comment
Есть ли три горизонтальных прокрутки? Или Listview, где каждая строка представляет собой горизонтальную прокрутку.   -  person Sana    schedule 15.06.2012
comment
@Sana - только один вид горизонтальной прокрутки   -  person Siva K    schedule 15.06.2012


Ответы (2)


не уверен, но могу попробовать такой подход

1- Create/inflate a horizontal scrollview ..
2- make for loop running i= 0 to x 
        where x= (totalCount/3)+(totalCount%3>0?1:0)
3- Create a  Linear layout with orientation vertical  
4- create one more loop form j=0 to 3 or (i+1)*3+j< totalCount
5- add your element layout in  Linear layout 
6 after the inner loop closed add Linear layout in horizontal scroll-view
  • условие завершения цикла, например, значение x может быть неточным, проверьте их

Чтобы сделать элемент кликабельным

1- take any view from  element layout like in you case image-view is good option  
 2- creates a class in you activity or better to extend you activity with clickListner.
 3- while creating the imageView for each element set this listener to all
 4- Set the data object or index  with element with image-view in tad using SetTag
 5- in Onclick function you will get image-view as argument and use getTag to get that data of attached with clicked element   
person Dheeresh Singh    schedule 15.06.2012
comment
я реализовал, как вы сказали. У меня есть один и тот же вид несколько раз, как мне нужно. Но когда я нажимаю на них, я не получаю всплывающее сообщение. Я добавил полное решение ниже - person Siva K; 15.06.2012
comment
Тост-сообщение появляется только для последнего представления с правильным номером тега, а не для остальных... - person Siva K; 15.06.2012

Благодаря Дхирешу Сингху

Ниже приведен мой файл main.xml.

<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>

у меня есть Horizontal scroll view в моем файле main.xml

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;
                }
            }
        }      
    }
}

в приведенном выше коде у меня есть lr — это LinearLayout для отображения его в вертикальном порядке, а View child — это данные, которые мне нужно показать как в вертикальном, так и в горизонтальном порядке.

Большое спасибо, Диреш Сингх

person Siva K    schedule 15.06.2012
comment
небольшая ошибка .... child.setOnClickListener (новый View.OnClickListener() должен быть внутри внутреннего цикла :) - person Dheeresh Singh; 15.06.2012
comment
У меня есть один запрос, в котором вы инициализировали переменную макета layout.addView(lr); - person Dheeresh Singh; 15.06.2012
comment
бесполезно .. теперь, где бы я ни нажимал на всплывающее сообщение, кажется, что это номер финала - person Siva K; 15.06.2012
comment
не нужно, чтобы Xml jasu спрашивал, где находится findViewById для переменной макета layout.addView(lr); - person Dheeresh Singh; 15.06.2012
comment
можете ли вы реализовать прослушиватель, как я сказал в своем ответе, реализовать View.OnClickListener в своей деятельности и передать это в child.setOnClickListener() и setTag и getTag из представления изображения - person Dheeresh Singh; 15.06.2012
comment
в следующей строке есть ошибка if(obj instanceof Integer) { position = (Integer(obj)).intValue(); } говоря, что метод Create 'Integer(Object)' - person Siva K; 15.06.2012
comment
я добавил метод private Object Integer (Object obj) { return null; } и теперь он показывает ошибку в .intValue(); говоря Добавить приведение к Integer (obj) - person Siva K; 15.06.2012
comment
это класс Integer, нет необходимости делать ............., где это требуется? должна опечатка ошибка - person Dheeresh Singh; 15.06.2012
comment
Привет, я скопировал этот код в свой проект, но окончательный View child = getLayoutInflater().inflate(R.layout.inflateview, null); lay = (LinearLayout)child.findViewById(R.id.threeByThree_tableRow1_1_Layout1); эта строка подчеркнута красной чертой, поэтому, пожалуйста, отправьте макет и содержимое xml inflateview - person Kevin Rameshwaran; 31.12.2012