Android GridView没有显示任何图像

时间:2016-08-09 03:54:43

标签: android gridview

我已经按照https://developer.android.com/guide/topics/ui/layout/gridview.html上的示例进行操作,并使用SO上的其他资源,至少不会崩溃,因为我正在片段中使用网格视图。

我正在尝试获取要在网格视图中显示的图像列表(为简单起见,我只是在mThumbIds中的ImageAdapter中将相同的图像放两次。

但是当我运行应用程序时,片段中根本没有显示GridView。片段中的其他视图加载正常,但它就像gridview甚至没有。我真的不确定如何调试它。

感谢任何帮助,谢谢。

ImageAdapter.java:

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {
        R.drawable.placeholder, R.drawable.placeholder
    };
}

PlaceholderFragment:

public static class PlaceholderFragment extends Fragment
{

...

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View rootView = inflater.inflate(R.layout.fragment_items, container, false);
        TextView textView = (TextView) rootView.findViewById(R.id.items_subheading);
        textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));

        GridView allImages = (GridView) rootView.findViewById(R.id.items_all_images);
        allImages.setAdapter(new ImageAdapter(rootView.getContext()));

        allImages.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
                // empty
            }
        });

        return rootView;
    }

fragment_items.xml

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.myapp.ItemsActivity$PlaceholderFragment">

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:gravity="top|left"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/items_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/placeholder"
            android:scaleType="fitStart"
            style="@style/ItemsImage" />

        <GridView
            android:id="@+id/items_all_images"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:columnWidth="20dp"
            android:numColumns="auto_fit"
            android:verticalSpacing="10dp"
            android:horizontalSpacing="10dp"
            android:gravity="center"
            android:background="#000000"
            />

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"
        android:orientation="vertical"
        android:background="@drawable/items_border">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <!-- About 10 text views -->

        </LinearLayout>


    </LinearLayout>
</LinearLayout>

修改

瞄准:

enter image description here

编辑2

解决方案:想出来! android:adjustViewBounds="true"上需要ImageView。没有这个属性,它似乎在其位置下面占据了无限的空间。

1 个答案:

答案 0 :(得分:1)

我认为你对包裹GridView的LinearLayout有一个问题你的LinearLayout是一个垂直的线性布局,所以如果你使用权重,GridView的高度应该是0dp,而你的代码中的高度是 wrap_content 宽度为0dp,因此请将高度更改为0dp,将宽度更改为wrap_content或match_parent

 <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:gravity="top|left"
        android:orientation="vertical">

        <GridView
            android:id="@+id/items_all_images"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:columnWidth="20dp"
            android:numColumns="auto_fit"
            android:verticalSpacing="10dp"
            android:horizontalSpacing="10dp"
            android:gravity="center"
            />

<强>更新

根据你的模拟,我认为这就是我要做的事情:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:text="text1"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:text="text1"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:text="text1"
            android:layout_height="wrap_content" />

        <!-- If the number of textviews is dynamic and not fixed then it's better to use ListView
             with adapter
         -->

        <!--<ListView-->
            <!--android:id="@android:id/list"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="wrap_content" />-->

    </LinearLayout>


    <GridView
        android:id="@+id/items_all_images"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_green_dark"
        android:layout_marginTop="5dp"
        android:columnWidth="20dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="10dp" />

</LinearLayout>

请注意如果您的文字视图未修复(可以是3个或更多...),那么您需要使用 ListView 和适配器。因此,ListView中的每个订单项都是 TextView