我的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;
}
}
答案 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 中定义项目的大小。然后所有项目将具有相同的大小。
对于较大的文本 - 您可以检查项目文本长度是否超出限制,您可以减小该项目的文本大小。通过这样做,所有项目都是均匀的,所有文本都将可见。
希望它有所帮助。