Java 基于对象状态的Android ListActivity行颜色
我有一个ListActivity,显示列表中的一组对象。我想根据MonitorObject中两个布尔值的状态更改行的背景和文本颜色 我需要扩展ArrayAdapter吗?如果是这样,我将非常感谢一个代码示例,因为我已经尝试了几天,但都没有成功Java 基于对象状态的Android ListActivity行颜色,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,我有一个ListActivity,显示列表中的一组对象。我想根据MonitorObject中两个布尔值的状态更改行的背景和文本颜色 我需要扩展ArrayAdapter吗?如果是这样,我将非常感谢一个代码示例,因为我已经尝试了几天,但都没有成功 public class Lwm extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(saved
public class Lwm extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
setListAdapter(new ArrayAdapter<MonitorObject>(this, R.layout.row, getMonitorObjects()));
}
private List<MonitorObject> getMonitorObjects() {
List<MonitorObject> mos = new ArrayList<MonitorObject>();
mos.add(new MonitorObject(15000, 20000, 25000));
mos.add(new MonitorObject(15000, 14000, 18000));
mos.add(new MonitorObject(15000, 12000, 14000));
mos.add(new MonitorObject(100, 200, 250));
mos.add(new MonitorObject(3000, 2500, 3500));
return mos;
}
}
我在commonware.com上的《忙碌的程序员Android开发指南》的免费摘录中找到了一篇关于如何做到这一点的很棒的教程。也可以访问youtube,它包含了很多有用的信息 基本上,我要做的不是创建一个自定义的ArrayAdapter并覆盖getView()。查看下面的代码
public class Lwm extends ListActivity {
private TextView mSelection;
private List<MonitorObject> mMonitorObjects;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMonitorObjects = getMonitorObjects();
setContentView(R.layout.main);
setListAdapter(new CustomAdapter());
mSelection = (TextView)findViewById(R.id.selection);
}
@Override
public void onListItemClick(ListView parent, View v, int position, long id){
mSelection.setText("Selection length is: " + mMonitorObjects.get(position).toString().length());
}
private class CustomAdapter extends ArrayAdapter<MonitorObject> {
CustomAdapter() {
super(Lwm.this, R.layout.row, R.id.label, mMonitorObjects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
// This gives us a View object back which, in reality, is our LinearLayout with
// an ImageView and a TextView, just as R.layout.row specifies.
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.row, parent, false);
}
TextView label = (TextView) row.findViewById(R.id.label);
label.setText(mMonitorObjects.get(position).toString());
ImageView icon = (ImageView)row.findViewById(R.id.icon);
MonitorObject mo = getMonitorObjects().get(position);
if (mo.ismAlarm()) {
icon.setImageResource(R.drawable.alarm);
row.setBackgroundColor(Color.RED);
} else if (mo.ismWarning()){
icon.setImageResource(R.drawable.warning);
row.setBackgroundColor(Color.YELLOW);
} else {
icon.setImageResource(R.drawable.ok);
row.setBackgroundColor(Color.GREEN);
}
return row;
}
}
private List<MonitorObject> getMonitorObjects() {
List<MonitorObject> mos = new ArrayList<MonitorObject>();
mos.add(new MonitorObject(15000, 20000, 25000));
mos.add(new MonitorObject(15000, 14000, 18000));
mos.add(new MonitorObject(15000, 12000, 14000));
mos.add(new MonitorObject(100, 200, 250));
mos.add(new MonitorObject(3000, 2500, 3500));
return mos;
}
}
公共类Lwm扩展了ListActivity{
私有文本视图mSelection;
私有列表对象;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
AmmonitorObjects=getMonitorObjects();
setContentView(R.layout.main);
setListAdapter(新的CustomAdapter());
mSelection=(TextView)findViewById(R.id.selection);
}
@凌驾
public void onListItemClick(ListView父视图、视图v、整数位置、长id){
mSelection.setText(“选择长度为:”+monitorObjects.get(position.toString().length());
}
私有类CustomAdapter扩展了ArrayAdapter{
CustomAdapter(){
super(Lwm.this、R.layout.row、R.id.label、对象);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父级){
视图行=转换视图;
if(行==null){
//这给了我们一个视图对象,它实际上是我们的线性布局
//一个ImageView和一个TextView,正如R.layout.row指定的那样。
LayoutInflater充气机=getLayoutInflater();
行=充气机。充气(R.layout.row,父级,false);
}
TextView标签=(TextView)row.findViewById(R.id.label);
label.setText(monitorObjects.get(position.toString());
ImageView图标=(ImageView)row.findViewById(R.id.icon);
MonitorObject mo=getMonitorObjects().get(位置);
if(mo.ismAlarm()){
icon.setImageResource(R.drawable.alarm);
行.背景色(颜色.红色);
}else if(mo.ismWarning()){
icon.setImageResource(R.drawable.warning);
行.背景色(颜色.黄色);
}否则{
icon.setImageResource(R.drawable.ok);
row.setBackgroundColor(颜色为绿色);
}
返回行;
}
}
私有列表getMonitorObjects(){
List mos=new ArrayList();
增加(新的监视器对象(15000、20000、25000));
增加(新的监视器对象(15000、14000、18000));
增加(新的监视器对象(15000、12000、14000));
添加(新监视器对象(100200250));
mos.添加(新监视器对象(3000025003500));
返回mos;
}
}
public class Lwm extends ListActivity {
private TextView mSelection;
private List<MonitorObject> mMonitorObjects;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMonitorObjects = getMonitorObjects();
setContentView(R.layout.main);
setListAdapter(new CustomAdapter());
mSelection = (TextView)findViewById(R.id.selection);
}
@Override
public void onListItemClick(ListView parent, View v, int position, long id){
mSelection.setText("Selection length is: " + mMonitorObjects.get(position).toString().length());
}
private class CustomAdapter extends ArrayAdapter<MonitorObject> {
CustomAdapter() {
super(Lwm.this, R.layout.row, R.id.label, mMonitorObjects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
// This gives us a View object back which, in reality, is our LinearLayout with
// an ImageView and a TextView, just as R.layout.row specifies.
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.row, parent, false);
}
TextView label = (TextView) row.findViewById(R.id.label);
label.setText(mMonitorObjects.get(position).toString());
ImageView icon = (ImageView)row.findViewById(R.id.icon);
MonitorObject mo = getMonitorObjects().get(position);
if (mo.ismAlarm()) {
icon.setImageResource(R.drawable.alarm);
row.setBackgroundColor(Color.RED);
} else if (mo.ismWarning()){
icon.setImageResource(R.drawable.warning);
row.setBackgroundColor(Color.YELLOW);
} else {
icon.setImageResource(R.drawable.ok);
row.setBackgroundColor(Color.GREEN);
}
return row;
}
}
private List<MonitorObject> getMonitorObjects() {
List<MonitorObject> mos = new ArrayList<MonitorObject>();
mos.add(new MonitorObject(15000, 20000, 25000));
mos.add(new MonitorObject(15000, 14000, 18000));
mos.add(new MonitorObject(15000, 12000, 14000));
mos.add(new MonitorObject(100, 200, 250));
mos.add(new MonitorObject(3000, 2500, 3500));
return mos;
}
}