gpt4 book ai didi

Android 背景颜色无法正确显示

转载 作者:行者123 更新时间:2023-11-30 01:57:37 25 4
gpt4 key购买 nike

第一次来这里,对 Android 还很陌生。我的“Activity 页面”中的背景颜色有问题。

当显示新时间时,时间的背景应该在深棕色和浅棕色之间交替,但由于某种原因,它有时有效而其他时间无效。

当应用程序显示不正确时,它要么在时间变化时保持相同的棕色阴影,要么在应该保持不变时改变棕色阴影。我不确定是什么原因造成的。

数据来自服务器上托管的 json 文件。数据加载到 AsyncTask 类中,应用程序将在用户到达事件页面之前等待数据下载。如果用户点击事件,将显示一条消息“请等待数据下载”。

这是其中一个条目的示例:

{
"title": "Some_Title",
"description": "Some_Description\n",
"times": [
{
"startTime": "2014-09-20 09:30:00",
"endTime": "2014-09-20 10:30:00"
},
{
"startTime": "2014-09-20 11:00:00",
"endTime": "2014-09-20 12:00:00"
},
{
"startTime": "2014-09-20 13:00:00",
"endTime": "2014-09-20 14:00:00"
}
],
"locationTitle": "Some_Location",
"locationLat": ##.######,
"locationLng": -###.######,
"typeX": 0,
"typeY": true,
"typeZ": false,
"typeA": false,
"typeB": false,
"typeC": false,
"SpreadsheetName": "Some_Name\n(A_Location)"
},

颜色在 Adapter 类中处理。以下是处理背景颜色的代码和事件页面的屏幕截图以及日志:

public class EventScheduleAdapter extends BaseAdapter {

private final ArrayList<Event> events;
private final Context context;
private final ArrayList<Integer> holders;

public EventScheduleAdapter(Context context, boolean[] types, Calendar day) {
this.context = context;
this.events = EventList.getInstance().getFilteredEvents(day, types);
holders = new ArrayList<Integer>();
}

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

@Override
public Object getItem(int i) {
return events.get(i);
}

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

@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
Event event = events.get(position);
View vi = convertView;
ViewHolder holder;
//ImageView image = new ImageView(this.context);
//FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
//params.setMargins(20, 20, 20, 20);

if (convertView == null) {
vi = View.inflate(context, R.layout.event_list_item, null);
holder = new ViewHolder();
holder.time = (TextView) vi.findViewById(R.id.timeNumber);
holder.am = (TextView) vi.findViewById(R.id.timeAM);
holder.title = (TextView) vi.findViewById(R.id.title);
holder.location = (TextView) vi.findViewById(R.id.location);
//holder.description = (TextView) vi.findViewById(R.id.description);
holder.color = (LinearLayout) vi.findViewById(R.id.color);
holder.timeBackground = (RelativeLayout) vi.findViewById(R.id.time);
//holder.image = (ImageView) vi.findViewById(R.id.tag_A);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}

if(event.getStartTime() != null && (position == 0 || !EventList.isSameTime(event.getStartTime(), events.get(position - 1).getStartTime()))) {
holder.time.setText(String.format("%tl:%tM", event.getStartTime(), event.getStartTime()));
holder.am.setText(String.format("%Tp", event.getStartTime()));
} else {
holder.time.setText("");
holder.am.setText("");
}
Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/main.ttf");
holder.title.setText(event.getTitle());
holder.title.setTypeface(font);
holder.location.setText(event.getLocationTitle());
holder.location.setTypeface(font);
//holder.description.setText(event.getDescription());
//holder.description.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/description.ttf"));
holder.color.removeAllViews();
if(event.isTypeA()) {
holder.color.addView(newColorView(R.drawable.tag_A));
} if(event.isTypeB()) {
holder.color.addView(newColorView(R.drawable.tag_B));
} if(event.isTypeC()) {
holder.color.addView(newColorView(R.drawable.tag_C));
} if(event.isTypeD()) {
holder.color.addView(newColorView(R.drawable.tag_D));
} if(event.isTypeE()) {
holder.color.addView(newColorView(R.drawable.tag_E));
}

if (position != 0) {
Log.i("EventScheduleAdapter", "position " + position + "event @ position: " + event.getTitle());
if (!EventList.isSameTime(event.getStartTime(), events.get(position - 1).getStartTime())) {
Log.i("EventScheduleAdapter", "Same time is FALSE");
if(holders.get(position - 1) == R.color.background_event_dark) {
Log.i("EventScheduleAdapter", "Different Color LIGHT");
holder.timeColor = R.color.background_event_light;
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
} else {
Log.i("EventScheduleAdapter", "Different Color DARK");
holder.timeColor = R.color.background_event_dark;
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
}
} else {
Log.i("EventScheduleAdapter", "Same time is TRUE");
holder.timeColor = holders.get(position - 1);
// holder.
//holder.timeColor = holder.get(position-1)
if (holder.timeColor == R.color.background_event_dark)
Log.i("EventScheduleAdapter", "SAME COLOR IS DARK");
if (holder.timeColor == R.color.background_event_light)
Log.i("EventScheduleAdapter", "SAME COLOR IS LIGHT");
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
}
} else {
Log.i("EventScheduleAdapter", "Position is 0");
holder.timeColor = R.color.background_event_dark;
holders.add(holder.timeColor);
}

holder.timeBackground.setBackgroundColor(context.getResources().getColor(holder.timeColor));
return vi;
}

/* Circle newColorView(int color) {
Circle layout = new Circle(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(50, 50);
params.setMargins(5, 5, 5, 5);
layout.setLayoutParams(params);
layout.setColor(color);
return layout;
} */

ImageView newColorView(int drawable) {
ImageView layout = new ImageView(context); // put drawable in here
LinearLayout.LayoutParams params;
if (drawable == R.drawable.tag_cp) {
params = new LinearLayout.LayoutParams(78, 50);
}
else if (drawable == R.drawable.tag_slo) {
params = new LinearLayout.LayoutParams(100, 50);
}
else {
params = new LinearLayout.LayoutParams(50, 50);
}
params.setMargins(5, 5, 5, 5);
layout.setLayoutParams(params);
layout.setImageResource(drawable);
return layout;
}

class ViewHolder {
int timeColor;
RelativeLayout timeBackground;
TextView time;
TextView am;
TextView title;
TextView location;
//TextView description;
LinearLayout color;
}
}

因为我是新成员,所以我不能发布图片 :( 但我会尽快发布

最佳答案

您不断向您的 holders 数组中添加您创建的每个项目。所以如果你被要求绘制 item0 3 次和 item1 3 次,你最终在数组中有 6 个条目。考虑使用 稀疏数组int[]。例如,当您被要求为位置 X 创建 View 时,您可以:

holders[X] = myColorId;

关于Android 背景颜色无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31977250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com