在相同的可滚动布局/片段中添加多个GridView

时间:2016-03-29 00:56:56

标签: android android-layout android-fragments gridview android-gridview

我知道这个问题已有几个问题,因为我已经搜索了一个小时,但这些问题都没有解决我的问题,也解决方案太旧了。

我正在制作一个活动应用程序,它显示了人们参加活动的情况。它需要有两个GridView:YES和NO,具体取决于出勤情况,并显示客人的照片。

我已经制作了“YES”GridView,我尝试在我的布局中添加一个新的TextView和GridView +在Java中为我的“NO”GridView 获取它的布局,但它只显示第一个。< / strong>

我做错了什么?我正在为每个标签使用Fragments。

这就是我的v.s.我想要的是什么:

This is my app, just showing one GridView: enter image description here

这是我片段的布局:

[fragment_one.xml]

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.example.MainActivity.OneFragment">

<TextView android:id="@+id/title_yes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="14dp"
android:text="Yes"
android:textAllCaps="true"
android:textSize="14sp"
android:fontFamily="sans-serif-regular" />

<GridView android:id="@+id/gridview_yes"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/title_yes"
    android:numColumns="4"
    android:verticalSpacing="2dp"
    android:horizontalSpacing="2dp"
    android:stretchMode="columnWidth"
    android:gravity="center" />

<TextView android:id="@+id/title_no"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="14dp"
    android:text="No"
    android:textAllCaps="true"
    android:textSize="14sp"
    android:fontFamily="sans-serif-regular" />

<GridView android:id="@+id/gridview_no"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/title_no"
    android:numColumns="4"
    android:verticalSpacing="2dp"
    android:horizontalSpacing="2dp"
    android:stretchMode="columnWidth"
    android:gravity="center" />

</LinearLayout>

这是我的片段的Java:

public class OneFragment extends Fragment {

    public OneFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_one, container, false);
        GridView gridViewYes = (GridView) view.findViewById(R.id.gridview_yes);
        GridView gridViewNo = (GridView) view.findViewById(R.id.gridview_no);
        gridViewYes.setAdapter(new ImageAdapter(view.getContext())); // uses the view to get the context instead of getActivity()
        gridViewNo.setAdapter(new ImageAdapter(view.getContext())); // uses the view to get the context instead of getActivity()

    gridViewYes.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(getActivity(), "Esta es la imagen " + position + ".", Toast.LENGTH_SHORT).show();
        }
    });

    return view;
    }

}

2 个答案:

答案 0 :(得分:1)

GridView可能不是您的最佳选择。当您在滚动容器中显示可能很长的事物列表时,将使用该窗口小部件。如果有一组可管理的项目不需要自己的滚动行为,TableView会更好。

另外,你可能不希望这些东西的match_height为match_hearent。使用wrap_content只允许它们与内容建议一样高。

如果由于不确定整个高度而需要滚动整个内容,请将LinearLayout放在ScrollView中,然后让它确定表格和文本的集合是否应该是可滚动的,如果它们太高而不能分配的空间。

答案 1 :(得分:1)

你的问题是你已经将GridView设置为match_parent。

android:layout_height="match_parent"

您应该更改如下:

android:layout_height="wrap_content"