我正在尝试根据从远程服务器上的数据库接收到的标志来更改行的背景颜色。
在我的代码中,我创建了一个名为 disable 的 ArrayList 来保存所有被标记的位置。我想将禁用列表中的内容与我的 ListView 中的位置相匹配。我研究了几个帖子,但没有一个明确显示如何做到这一点。我将找到的内容拼凑在一起,并将其放入下面的自定义适配器中。
据我了解, public int getItemViewType(int position) 可以根据条件选择特定行并更改其属性。满足此条件时如何更改背景?我的程序中 getItemViewType(int position) 中的代码不起作用,但您可以看到我正在尝试做什么。
问题1:我需要制作两个xml布局文件吗?一个用于正常视图,另一个用于禁用视图?问题 2:你知道我可以遵循的任何例子吗?
package com.convention.notification.app;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class NewsRowAdapter extends ArrayAdapter<Item> {
private Activity activity;
private List<Item> items;
private Item objBean;
private int row;
private List<Integer> disable;
View view ;
public NewsRowAdapter(Activity act, int resource, List<Item> arrayList, List<Integer> disableList) {
super(act, resource, arrayList);
this.activity = act;
this.row = resource;
this.items = arrayList;
this.disable=disableList;
System.out.println("results of delete list a:"+disable.toString());
}
public int getCount(){
return items.size();
}
public Item getItem(int position){
return null;
}
public long getItemId(int position){
return position;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
for (int s: disable){
if (s == position){
// view.setBackgroundColor(Color.YELLOW);
}
}
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
view = convertView;
ViewHolder holder;
if (view == null) {
//ViewHolder is a custom class that gets TextViews by name
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(row, null);
// holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription);
/* setTag Sets the tag associated with this view. A tag can be used to
* mark a view in its hierarchy and does not have to be unique
* within the hierarchy. Tags can also be used to store data within
* a view without resorting to another data structure.
*/
view.setTag(holder);
} else {
//the Object stored in this view as a tag
holder = (ViewHolder) view.getTag();
}
if ((items == null) || ((position + 1) > items.size())){
return view;
}
objBean = items.get(position);
holder.tv_event_name = (TextView) view.findViewById(R.id.tv_event_name);
holder.tv_event_date = (TextView) view.findViewById(R.id.tv_event_date);
holder.tv_event_start = (TextView) view.findViewById(R.id.tv_event_start);
holder.tv_event_end = (TextView) view.findViewById(R.id.tv_event_end);
holder.tv_event_location = (TextView) view.findViewById(R.id.tv_event_location);
if (holder.tv_event_name != null && null != objBean.getName()
&& objBean.getName().trim().length() > 0) {
holder.tv_event_name.setText(Html.fromHtml(objBean.getName()));
}
if (holder.tv_event_date != null && null != objBean.getDate()
&& objBean.getDate().trim().length() > 0) {
holder.tv_event_date.setText(Html.fromHtml(objBean.getDate()));
}
if (holder.tv_event_start != null && null != objBean.getStartTime()
&& objBean.getStartTime().trim().length() > 0) {
holder.tv_event_start.setText(Html.fromHtml(objBean.getStartTime()));
}
if (holder.tv_event_end != null && null != objBean.getEndTime()
&& objBean.getEndTime().trim().length() > 0) {
holder.tv_event_end.setText(Html.fromHtml(objBean.getEndTime()));
}
if (holder.tv_event_location != null && null != objBean.getLocation ()
&& objBean.getLocation ().trim().length() > 0) {
holder.tv_event_location.setText(Html.fromHtml(objBean.getLocation ()));
}
return view;
}
public class ViewHolder {
public TextView
tv_event_name,
tv_event_date,
tv_event_start,
tv_event_end,
tv_event_location
/*tv_event_delete_flag*/;
}
}
日志猫:
06-11 00:06:43.133: D/dalvikvm(60): GC_EXPLICIT freed 230K, 45% free 4939K/8839K, external 3511K/3903K, paused 81ms
06-11 00:06:43.133: I/installd(34): unlink /data/dalvik-cache/data@app@com.convention.notification.app-1.apk@classes.dex
06-11 00:06:43.133: D/AndroidRuntime(528): Shutting down VM
06-11 00:06:43.173: D/dalvikvm(528): GC_CONCURRENT freed 101K, 72% free 295K/1024K, external 0K/0K, paused 1ms+0ms
06-11 00:06:43.173: D/jdwp(528): Got wake-up signal, bailing out of select
06-11 00:06:43.173: D/dalvikvm(528): Debugger has detached; object registry had 1 entries
06-11 00:06:43.203: I/dalvikvm(528): JNI: AttachCurrentThread (from ???.???)
06-11 00:06:43.203: I/AndroidRuntime(528): NOTE: attach of thread 'Binder Thread #3' failed
06-11 00:06:43.653: D/AndroidRuntime(542): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
06-11 00:06:43.653: D/AndroidRuntime(542): CheckJNI is ON
06-11 00:06:44.223: D/AndroidRuntime(542): Calling main entry com.android.commands.am.Am
06-11 00:06:44.243: I/ActivityManager(60): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.convention.notification.app/.DataView } from pid 542
06-11 00:06:44.273: I/ActivityManager(60): Start proc com.convention.notification.app for activity com.convention.notification.app/.DataView: pid=550 uid=10042 gids={3003}
06-11 00:06:44.323: D/AndroidRuntime(542): Shutting down VM
06-11 00:06:44.323: D/dalvikvm(542): GC_CONCURRENT freed 103K, 69% free 319K/1024K, external 0K/0K, paused 1ms+1ms
06-11 00:06:44.334: D/dalvikvm(542): Debugger has detached; object registry had 1 entries
06-11 00:06:45.503: I/ActivityManager(60): Displayed com.convention.notification.app/.DataView: +1s233ms
06-11 00:06:47.163: I/System.out(550): item disalbed is at postion :1
06-11 00:06:47.163: I/System.out(550): item disalbed is at postion :6
06-11 00:06:47.163: I/System.out(550): item disalbed is at postion :14
06-11 00:06:47.163: I/System.out(550): item disalbed is at postion :15
06-11 00:06:47.163: I/System.out(550): item disalbed is at postion :18
06-11 00:06:47.163: I/System.out(550): results of delete list :[1, 6, 14, 15, 18]
06-11 00:06:47.163: I/System.out(550): results of delete list in Adapeter:[1, 6, 14, 15, 18]
06-11 00:06:47.173: I/System.out(550): set adapaer to list view called;
06-11 00:06:50.693: D/dalvikvm(237): GC_EXPLICIT freed 8K, 51% free 2725K/5511K, external 1625K/2137K, paused 61ms
06-11 00:06:55.783: D/dalvikvm(264): GC_EXPLICIT freed 17K, 52% free 2778K/5703K, external 1625K/2137K, paused 98ms
06-11 00:07:05.163: D/dalvikvm(308): GC_EXPLICIT freed 15K, 49% free 3363K/6535K, external 1625K/2137K, paused 43ms
06-11 00:07:10.284: D/dalvikvm(361): GC_EXPLICIT freed 15K, 48% free 3523K/6727K, external 1625K/2137K, paused 102ms
06-11 00:07:15.303: D/dalvikvm(378): GC_EXPLICIT freed 6K, 51% free 2718K/5511K, external 1625K/2137K, paused 73ms
06-11 00:07:20.383: D/dalvikvm(201): GC_EXPLICIT freed 21K, 50% free 2995K/5959K, external 1625K/2137K, paused 121ms
06-11 00:07:25.463: D/dalvikvm(130): GC_EXPLICIT freed 114K, 48% free 3089K/5895K, external 4932K/5608K, paused 124ms
06-11 00:11:22.113: D/SntpClient(60): request time failed: java.net.SocketException: Address family not supported by protocol
- - - - - - - - - - - - - 更新 - - - - - - - - - - - - ------ 我通过删除 getItem() 方法修复了这个异常错误,并且我能够在列表中的一些视图上看到黄色背景。
当前的问题在 while 循环中。我正在尝试将我的列表视图与标记的项目进行比较,并且只在标记的项目上放置一个黄色背景。但是,我在每四个视图上都会得到一个黄色背景。这不是我打算做的。您能否建议我如何修复 While 循环和/或 for 循环中的逻辑以使黄色背景与正确的位置/视图匹配?
这是更新的代码:
package com.convention.notification.app;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class NewsRowAdapter extends ArrayAdapter<Item> {
private Activity activity;
private List<Item> items;
private Item objBean;
private int row;
private List<Integer> disable;
View view ;
public NewsRowAdapter(Activity act, int resource, List<Item> arrayList, List<Integer> disableList) {
super(act, resource, arrayList);
this.activity = act;
this.row = resource;
this.items = arrayList;
this.disable=disableList;
System.out.println("results of delete list a:"+disable.toString());
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(row, null);
try{
int j = 0;
while (j < items.size()) {
for(int k =0;k< disable.size();k++){
if(position == disable.get(k)){
view.setBackgroundColor(Color.YELLOW);
System.out.println("background set to yellow at disable "+disable.get(j));
System.out.println("background set to yellow at position "+position);
} else {
view.setBackgroundColor(Color.WHITE);
System.out.println("background set to white at position "+position);
}
}
j++;
}
}catch(IndexOutOfBoundsException e){
System.out.println(" crash");
}
//ViewHolder is a custom class that gets TextViews by name: tvName, tvCity, tvBDate, tvGender, tvAge;
holder = new ViewHolder();
/* setTag Sets the tag associated with this view. A tag can be used to
* mark a view in its hierarchy and does not have to be unique
* within the hierarchy. Tags can also be used to store data within
* a view without resorting to another data structure.
*/
view.setTag(holder);
} else {
//the Object stored in this view as a tag
holder = (ViewHolder) view.getTag();
}
if ((items == null) || ((position + 1) > items.size()))
return view;
objBean = items.get(position);
holder.tv_event_name = (TextView) view.findViewById(R.id.tv_event_name);
holder.tv_event_date = (TextView) view.findViewById(R.id.tv_event_date);
holder.tv_event_start = (TextView) view.findViewById(R.id.tv_event_start);
holder.tv_event_end = (TextView) view.findViewById(R.id.tv_event_end);
holder.tv_event_location = (TextView) view.findViewById(R.id.tv_event_location);
if (holder.tv_event_name != null && null != objBean.getName()
&& objBean.getName().trim().length() > 0) {
holder.tv_event_name.setText(Html.fromHtml(objBean.getName()));
}
if (holder.tv_event_date != null && null != objBean.getDate()
&& objBean.getDate().trim().length() > 0) {
holder.tv_event_date.setText(Html.fromHtml(objBean.getDate()));
}
if (holder.tv_event_start != null && null != objBean.getStartTime()
&& objBean.getStartTime().trim().length() > 0) {
holder.tv_event_start.setText(Html.fromHtml(objBean.getStartTime()));
}
if (holder.tv_event_end != null && null != objBean.getEndTime()
&& objBean.getEndTime().trim().length() > 0) {
holder.tv_event_end.setText(Html.fromHtml(objBean.getEndTime()));
}
if (holder.tv_event_location != null && null != objBean.getLocation ()
&& objBean.getLocation ().trim().length() > 0) {
holder.tv_event_location.setText(Html.fromHtml(objBean.getLocation ()));
}
return view;
}
public class ViewHolder {
public TextView
tv_event_name,
tv_event_date,
tv_event_start,
tv_event_end,
tv_event_location
/*tv_event_delete_flag*/;
}
}
日志猫:
06-11 10:54:45.063: I/System.out(1692): item disalbed is at postion :1
06-11 10:54:45.063: I/System.out(1692): item disalbed is at postion :6
06-11 10:54:45.063: I/System.out(1692): item disalbed is at postion :14
06-11 10:54:45.063: I/System.out(1692): item disalbed is at postion :15
06-11 10:54:45.073: I/System.out(1692): item disalbed is at postion :18
06-11 10:54:45.073: I/System.out(1692): results of delete list :[1, 6, 14, 15, 18]
06-11 10:54:45.073: I/System.out(1692): results of delete list a:[1, 6, 14, 15, 18]
06-11 10:54:45.073: I/System.out(1692): set adapaer to list view called;
06-11 10:54:45.183: I/System.out(1692): background set to white at position 0
06-11 10:54:45.393: I/System.out(1692): background set to white at position 0
06-11 10:54:45.393: I/System.out(1692): background set to white at position 0
06-11 10:54:45.393: I/System.out(1692): background set to white at position 0
06-11 10:54:45.393: I/System.out(1692): background set to white at position 0
06-11 10:54:45.393: I/System.out(1692): background set to white at position 0
06-11 10:54:45.393: I/System.out(1692): background set to white at position 0
06-11 10:54:45.403: I/System.out(1692): background set to white at position 0
06-11 10:54:45.403: I/System.out(1692): background set to white at position 0
06-11 10:54:45.403: I/System.out(1692): background set to white at position 0
06-11 10:54:45.403: I/System.out(1692): background set to white at position 0
06-11 10:54:45.403: I/System.out(1692): background set to white at position 0
06-11 10:54:45.403: I/System.out(1692): background set to white at position 0
06-11 10:54:45.573: I/System.out(1692): background set to yellow at disable list 1
06-11 10:54:45.573: I/System.out(1692): background set to yellow at position 1
06-11 10:54:45.573: I/System.out(1692): background set to white at position 1
06-11 10:54:45.573: I/System.out(1692): background set to white at position 1
06-11 10:54:45.573: I/System.out(1692): background set to white at position 1
06-11 10:54:45.573: I/System.out(1692): background set to white at position 1
06-11 10:54:45.573: I/System.out(1692): background set to yellow at disable list 6
06-11 10:54:45.573: I/System.out(1692): background set to yellow at position 1
06-11 10:54:45.573: I/System.out(1692): background set to white at position 1
06-11 10:54:45.573: I/System.out(1692): background set to white at position 1
06-11 10:54:45.573: I/System.out(1692): background set to white at position 1
06-11 10:54:45.573: I/System.out(1692): background set to white at position 1
06-11 10:54:45.573: I/System.out(1692): background set to yellow at disable list 14
06-11 10:54:45.573: I/System.out(1692): background set to yellow at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to yellow at disable list 15
06-11 10:54:45.583: I/System.out(1692): background set to yellow at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to yellow at disable list 18
06-11 10:54:45.583: I/System.out(1692): background set to yellow at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.583: I/System.out(1692): background set to white at position 1
06-11 10:54:45.593: I/System.out(1692): crash
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/System.out(1692): background set to white at position 2
06-11 10:54:45.623: I/Sys....3,4,....
06-11 10:54:46.163: I/System.out(1692): background set to white at position 5
06-11 10:54:46.163: I/System.out(1692): background set to white at position 5
06-11 10:54:46.163: I/System.out(1692): background set to white at position 5
06-11 10:54:46.163: I/System.out(1692): background set to white at position 5
06-11 10:54:46.163: I/System.out(1692): background set to white at position 5
06-11 10:54:46.163: I/System.out(1692): background set to white at position 5
06-11 10:54:46.163: I/System.out(1692): background set to white at position 5
06-11 10:54:46.163: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.173: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.183: I/System.out(1692): background set to white at position 5
06-11 10:54:46.193: I/System.out(1692): background set to white at position 5
06-11 10:54:46.193: I/System.out(1692): background set to white at position 5
06-11 10:54:46.193: I/System.out(1692): background set to white at position 5
06-11 10:54:46.193: I/System.out(1692): background set to white at position 5
06-11 10:54:46.193: I/System.out(1692): background set to white at position 5
06-11 10:54:46.193: I/System.out(1692): background set to white at position 5
06-11 10:54:46.193: I/System.out(1692): background set to white at position 5
06-11 10:54:46.203: I/System.out(1692): background set to white at position 5
06-11 10:54:46.203: I/System.out(1692): background set to white at position 5
06-11 10:54:46.203: I/System.out(1692): background set to white at position 5
06-11 10:54:46.203: I/System.out(1692): background set to white at position 5
06-11 10:54:46.203: I/System.out(1692): background set to white at position 5
06-11 10:54:46.203: I/System.out(1692): background set to white at position 5
06-11 10:54:46.203: I/System.out(1692): background set to white at position 5
06-11 10:54:46.203: I/System.out(1692): background set to white at position 5
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to yellow at disable list 1
06-11 10:54:46.283: I/System.out(1692): background set to yellow at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to yellow at disable list 6
06-11 10:54:46.283: I/System.out(1692): background set to yellow at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to yellow at disable list 14
06-11 10:54:46.283: I/System.out(1692): background set to yellow at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.283: I/System.out(1692): background set to white at position 6
06-11 10:54:46.293: I/System.out(1692): background set to white at position 6
06-11 10:54:46.293: I/System.out(1692): background set to white at position 6
06-11 10:54:46.293: I/System.out(1692): background set to yellow at disable list 15
06-11 10:54:46.293: I/System.out(1692): background set to yellow at position 6
06-11 10:54:46.293: I/System.out(1692): background set to white at position 6
06-11 10:54:46.293: I/System.out(1692): background set to white at position 6
06-11 10:54:46.303: I/System.out(1692): background set to white at position 6
06-11 10:54:46.303: I/System.out(1692): background set to white at position 6
06-11 10:54:46.303: I/System.out(1692): background set to yellow at disable list 18
06-11 10:54:46.303: I/System.out(1692): background set to yellow at position 6
06-11 10:54:46.303: I/System.out(1692): background set to white at position 6
06-11 10:54:46.303: I/System.out(1692): background set to white at position 6
06-11 10:54:46.303: I/System.out(1692): background set to white at position 6
06-11 10:54:46.303: I/System.out(1692): background set to white at position 6
06-11 10:54:46.303: I/System.out(1692): crash
06-11 10:54:46.353: I/System.out(1692): background set to white at position 7
06-11 10:54:46.353: I/System.out(1692): background set to white at position 7
06-11 10:54:46.353: I/System.out(1692): background set to white at position 7
06-11 10:54:46.353: I/System.out(1692): background set to white at position 7
06-11 10:54:46.353: I/System.out(1692): background set to white at position 7
06-11 10:54:46.353: I/System.out(......
谢谢你的帮助!