0

の子が4 列を含む束である場所に aLinearLayoutを追加したいと思います。の項目は、コードから動的に入力されます。MainRows クラスで設定されたコンテンツの数に応じて、2 行または 1 行のいずれかを持つことができます。ScrollViewLinearLayoutGridLayoutsGridLayoutGridLayout

現在、 のセットが多数存在する可能性があるGridLayoutため、 aScrollViewが必要です。問題は、ScrollView2 行のグリッドのみをスクロールすることです。意味がある場合、この 2 行は MainRows の 1 つのセットにあります。レイアウトに含まれるすべてのグリッドをスクロールしたい。

ここに私のactivity_main.xmlがあります:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:id="@+id/parent">

        <TextView
            android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="@string/topEight"
            android:layout_marginTop="5dp">
        </TextView>
    </LinearLayout>
</ScrollView>

single_video_grid.xml :

<?xml version="1.0" encoding="utf-8"?>
<GridView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gridview0"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:layout_marginTop="8dp"
        android:numColumns="4">
</GridView>

コードから、次のようなビューを動的に追加および設定しています。

            ArrayList<MainRows> rows = JSONVideoDataHandler.getRowElements();
            for (MainRows row : rows) {
                LinearLayout parentLayout = (LinearLayout) findViewById(R.id.parent);
                if(row instanceof Ads){
                    // TODO implement ads layout
                }else{
                    int numberOfItems = row.getNumberOfItems();
                    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    if(numberOfItems > 4){
                        GridView gridview = (GridView) inflater.inflate(R.layout.single_video_grid, null);
                        // if number of vids exceeds 4, 2 rows are required.
                        // therefore setting 8 imageplaceholders.
                        gridview.setAdapter(new ImageAdapter(this, row, 8));
                        gridview.setOnItemClickListener(new OnItemClickListener() {
                            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                                Toast.makeText(activity, "haha " + position,
                                        Toast.LENGTH_SHORT).show();
                            }
                        });
                        parentLayout.addView(gridview);
                    }else{
                        GridView gridview = (GridView) inflater.inflate(R.layout.single_video_grid, null);
                        // if number of vids does not exceed 4, 1 row is required.
                        // therefore setting 4 imageplaceholders.
                        gridview.setAdapter(new ImageAdapter(this, row, 4));
                        gridview.setOnItemClickListener(new OnItemClickListener() {
                            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                                Toast.makeText(activity, "haha " + position,
                                        Toast.LENGTH_SHORT).show();
                            }
                        });
//                      linearLayout = (LinearLayout) findViewById(R.id.parent);
                        parentLayout.addView(gridview);
                    }
                }

質問が十分に明確でない場合はお知らせください。あらゆる種類の助けをいただければ幸いです。ありがとうございました!

4

2 に答える 2

1

私の理解が正しければ、GridView には本質的にスクロール ビューがあるため、問題が発生しています。したがって、GridView を ScrollView 内に配置すると、GridView のスクロール動作が打ち負かされるため、SrollView の目的が実際に無効になります。この質問と回答を見て、まさにこの問題に対処してください。ScrollView 内に GridView を配置する方法

于 2013-02-11T04:31:31.533 に答える
1

グリッド レイアウトだけを使用する必要がある理由がわかりません。フレームレイアウトの幅が screenWidth / 4 であることを確認してください。

<scrollview>
 <linearlayout> // vertical
  for i < categories {
   <linerlayout> // horizontal
    for j < videos {
     <framelayout>
      // the content you want to show
     </framelayout>
    }
   </linearlayout>
  }
 </linearlayout>
</scrollview>
于 2013-02-11T04:46:45.843 に答える