Griditem表现得很奇怪

时间:2016-09-14 16:06:43

标签: android gridview

我的Gridview项目表现得非常奇怪,如果我向下滚动然后再向上一些项目比其他项目小,您将在图像中看到。

的GridItem

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    android:background="#fff"
    android:padding="15dp"
    android:id="@+id/ll1">
    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:visibility="visible">

    <TextView
        android:id="@+id/Fach"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="@color/colorAccent"
        android:text="Fach"
        android:textSize="13sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/Raum"
        android:textColor="@color/colorAccent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginBottom="5dp"
        android:gravity="center"
        android:text="Seminarraum" />
</LinearLayout>

自定义适配器

    private class ViewHolder {
        TextView tvFach, tvRaum;
        LinearLayout ll;
    }

    public ImageAdapter(Context context, ArrayList<StundenEigenschaften> mobileValues) {
        this.context = context;
        this.mobileValues = mobileValues;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.stundenplan_griditem, null);

            holder = new ViewHolder();
            convertView.setTag(holder);

            // set value into textview
            holder.tvFach = (TextView) convertView.findViewById(R.id.Fach);
            holder.ll = (LinearLayout) convertView.findViewById(R.id.ll);
            holder.tvRaum = (TextView) convertView.findViewById(R.id.Raum);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.tvRaum.setText(String.valueOf(position));

        Log.e("Val", mobileValues.get(position).getFach() + "\n" + mobileValues.get(position).getRaum());
        if (!mobileValues.get(position).isStunde()) {
            holder.tvFach.setText(mobileValues.get(position).getFach());
            holder.tvRaum.setText(String.valueOf(mobileValues.get(position).getRaum() + "---" + String.valueOf(position)));
            for (Faecher f : fächerAll) {
                if (f.getFach().equals(mobileValues.get(position).getFach())) {
                    String[] splitted = f.getColor().split("\\s+");
                    holder.ll.setBackgroundColor(Color.rgb(Integer.valueOf(splitted[0]), Integer.valueOf(splitted[1]), Integer.valueOf(splitted[2])));
                }
            }
            holder.ll.setVisibility(View.VISIBLE);
        } else {
            //holder.ll.setVisibility(View.INVISIBLE);
        }


        return convertView;
    }

    @Override
    public int getCount() {
        return mobileValues.size();
    }

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

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

}

图像在向下和向上滚动后的外观......: enter image description here

2 个答案:

答案 0 :(得分:1)

       private class ViewHolder {
        TextView tvFach, tvRaum;
        LinearLayout ll;
    }

    public ImageAdapter(Context context, ArrayList<StundenEigenschaften> mobileValues) {
        this.context = context;
        this.mobileValues = mobileValues;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.stundenplan_griditem, null);

            holder = new ViewHolder();
            convertView.setTag(holder);

            // set value into textview
            holder.tvFach = (TextView) convertView.findViewById(R.id.Fach);
            holder.ll = (LinearLayout) convertView.findViewById(R.id.ll);
            holder.tvRaum = (TextView) convertView.findViewById(R.id.Raum);


        holder.tvRaum.setText(String.valueOf(position));

        Log.e("Val", mobileValues.get(position).getFach() + "\n" + mobileValues.get(position).getRaum());
        if (!mobileValues.get(position).isStunde()) {
            holder.tvFach.setText(mobileValues.get(position).getFach());
            holder.tvRaum.setText(String.valueOf(mobileValues.get(position).getRaum() + "---" + String.valueOf(position)));
            for (Faecher f : fächerAll) {
                if (f.getFach().equals(mobileValues.get(position).getFach())) {
                    String[] splitted = f.getColor().split("\\s+");
                    holder.ll.setBackgroundColor(Color.rgb(Integer.valueOf(splitted[0]), Integer.valueOf(splitted[1]), Integer.valueOf(splitted[2])));
                }
            }
            holder.ll.setVisibility(View.VISIBLE);
        } else {
            //holder.ll.setVisibility(View.INVISIBLE);
        }


        return convertView;
    }

    @Override
    public int getCount() {
        return mobileValues.size();
    }

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

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

}

尝试使用此代码

答案 1 :(得分:1)

在网格项目根线性布局中,您已将高度指定为换行内容。

由于这个原因,较大的项目正在包装内容。

在dp 中定义项目的大小。然后所有项目将具有相同的大小。

对于较大的文本 - 您可以检查项目文本长度是否超出限制,您可以减小该项目的文本大小。通过这样做,所有项目都是均匀的,所有文本都将可见。

希望它有所帮助。