The wrong colors look like you see in the image (in the square)
我为自定义GridView项制作了适配器,但显示了错误的颜色。 我已经检查过了,但是它将正确的颜色Integers传递给了适配器,所以我认为应该是错误的。 谢谢您的帮助。
public class Uebersichtadapter extends BaseAdapter {
private Context context;
private ArrayList<Uebersichtliste> liste;
public Uebersichtadapter(Context c, ArrayList<Uebersichtliste> liste) {
context = c;
this.liste = liste;
}
@Override
public int getCount() {
return liste.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return 0;
}
private class ViewHolder {
TextView titel;
TextView underline;
TextView text;
RelativeLayout background;
ImageView bild;
}
@Override
public View getView(int position, View convertView, ViewGroup
parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewHolder holder = null;
if (convertView==null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.uebersichtelement, null);
GridView grid = (GridView)parent;
int size = grid.getColumnWidth();
convertView.setLayoutParams(new GridView.LayoutParams(size,size));
holder.text = (TextView) convertView.findViewById(R.id.textView10);
holder.underline = (TextView) convertView.findViewById(R.id.textView9);
holder.titel = (TextView) convertView.findViewById(R.id.textView8);
holder.background=(RelativeLayout) convertView.findViewById(R.id.uebbackground);
holder.bild=(ImageView) convertView.findViewById(R.id.imageView3);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
holder.titel.setText(liste.get(position).getTitel());
holder.underline.setText(liste.get(position).getUnderline());
holder.text.setText(liste.get(position).getText());
Log.e("Test",String.valueOf(liste.get(position).getTextffarbe()));
Log.e("Test",String.valueOf(liste.get(position).getBildfarbe()));
holder.text.setTextColor(liste.get(position).getTextffarbe());
if (String.valueOf(liste.get(position).getBildfarbe()).contains("drawable_border"))holder.background.setBackgroundResource(liste.get(position).getBildfarbe());
else if (String.valueOf(liste.get(position).getBildfarbe()).contains("drawable")) holder.bild.setImageResource(liste.get(position).getBildfarbe());
else holder.background.setBackgroundColor(liste.get(position).getBildfarbe());
return convertView;
}
}
我不知道那里可能有什么问题,但是无论如何都必须有一些东西,它不可能出现在列表中,或者可能是在布局中:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/uebbackground"
android:layout_width="150dp"
android:layout_height="150dp"
android:padding="5dp">
<ImageView
android:id="@+id/imageView3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp" />
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center"
android:singleLine="true"
android:textColor="@android:color/black"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:gravity="center"
android:singleLine="true"
android:textColor="@android:color/darker_gray"
android:textSize="12sp" />
<TextView
android:id="@+id/textView10"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:singleLine="true"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold" />
适配器中的数据是:
a.add(new Uebersichtliste("Vorgeschlagenes Element",elemente.get(n).getsymbol(),elemente.get(n).getdeutsch(),hintergrund,1,textfarbe));
hintergund =类似R.color.red textfarbe =类似R.color.black
答案 0 :(得分:0)
首先,正如@EugenPechanec所说,您不应该每次想要访问属性时都从列表中获取项目。因为当您多次调用同一个方法时,会降低性能。您不应使用以下内容:
...
holder.titel.setText(liste.get(position).getTitel());
holder.underline.setText(liste.get(position).getUnderline());
holder.text.setText(liste.get(position).getText());
Log.e("Test",String.valueOf(liste.get(position).getTextffarbe()));
Log.e("Test",String.valueOf(liste.get(position).getBildfarbe()));
holder.text.setTextColor(liste.get(position).getTextffarbe());
...
使用类似这样的内容:
...
// Get the item only once, then reuse it.
Uebersichtliste item = liste.get(position);
holder.titel.setText(item.getTitel());
holder.underline.setText(item.getUnderline());
holder.text.setText(item.getText());
...
holder.text.setTextColor(litem.getTextffarbe());
然后,您需要更改以下代码,这些代码很难阅读且容易出错:
if (String.valueOf(liste.get(position).getBildfarbe()).contains("drawable_border"))holder.background.setBackgroundResource(liste.get(position).getBildfarbe());
else if (String.valueOf(liste.get(position).getBildfarbe()).contains("drawable")) holder.bild.setImageResource(liste.get(position).getBildfarbe());
else holder.background.setBackgroundColor(liste.get(position).getBildfarbe());
像这样:
// call item.getBildfarbe() only once.
// bildfarbe is a drawable resource id (guessing)
int bildfarbeResId = item.getBildfarbe();
// and convert to string
String bildfarbe = (String) bildfarbeResId;
if(bildfarbe.contains("drawable_border")) {
holder.background.setBackgroundResource(bildfarbeResId);
} else if(bildfarbe.contains("drawable")) {
holder.bild.setImageResource(bildfarbeResId);
} else {
holder.background.setBackgroundColor(bildfarbeResId);
}
现在,让我们剖析问题根源所在的最后一个代码。
您会看到您正在尝试将drawable id
转换为字符串:
// call item.getBildfarbe() only once.
// assuming bildfarbe is a drawable resource id.
int bildfarbeResId = item.getBildfarbe();
// and convert to string
String bildfarbe = (String) bildfarbeResId;
它将为您提供一个整数字符串,如下所示:
String bildfarbe = "123456";
但是您正在将其与非整数值进行比较:
if(bildfarbe.contains("drawable_border")) {
...
} else if(bildfarbe.contains("drawable")) {
...
} else {
holder.background.setBackgroundColor(bildfarbeResId);
}
,因此它将始终属于else
部分。因此,每次将项目值设置为支架时,您只需设置背景颜色。