我有一个ListActivity显示列表中的一堆对象。我想根据MonitorObject中两个布尔值的状态更改行的背景和文本颜色。
我是否需要扩展ArrayAdapter?如果是这样的话,代码示例将不胜感激,因为我已经尝试了几天,但没有成功。
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;
}
}
public class MonitorObject {
private int mTimeTotal;
private int mWarningThreshold;
private int mAlarmThreshold;`enter code here`
private boolean mWarning;
private boolean mAlarm;
public MonitorObject(int timeTotal, int warningThreshold, int alarmThreshold) {
this.mTimeTotal = timeTotal;
this.mWarningThreshold = warningThreshold;
this.mAlarmThreshold = alarmThreshold;
mWarning = (mTimeTotal > mWarningThreshold) ? true : false;
mAlarm = (mTimeTotal > mAlarmThreshold) ? true : false;
}
/*getters, setters, tostring goes here*/
}
我在commonsware.com的“ Android开发的繁忙编码员指南”的免费摘录中找到了有关如何执行此操作的出色教程。还可以在youtube
上查看Google I / O
2010-ListView的世界
,其中包含许多有用的信息。
基本上,我要做的只是创建一个自定义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;
}
}
我有一个组件,它作为一个道具发送一个方法来改变表单的输入值(像任何基本表单一样)。在onChange开始工作后,我决定添加一个clear按钮来一次清除所有输入值,因此我创建了一个方法来清除所有输入。 示例: 像上面的方法那样清除会产生一个错误,因为我要移除state中的键,而表单输入的值是针对state的。没问题,所以我想,我只需要将setState中的所有输入添加到一个空字符串,如:which
根据Googles材料指南: https://material.io/guidelines/components/text-fields.html#text-fields-layout TextInputLayout提示应该与错误消息的颜色相同: 我如何更改此行为以适应Google自己的指导方针?
在下面的示例中,我希望组件在列表更新时重新渲染。但是即使连接传递了新状态,它也不会重新呈现组件。 我知道connect执行浅层比较,但不知道如何使其比较对象的值。我找不到任何启用选项的连接示例。 我已经了解了redux连接的组件如何知道何时重新渲染?还有一些,但也没用。 我试过了 只是试图让它重新渲染任何变化。这似乎也不起作用。 输出
我在JS对象(不是数组)中有一个
问题内容: 根据文档,反应应用程序的状态必须是可序列化的。那班呢? 假设我有一个ToDo应用。到目前为止,每个项目都具有,等属性。现在,我想对不可序列化的对象使用方法。即这将重命名待办事项,做了很多其他的东西。 据我了解,我可以在某处声明函数,然后通过props将该函数传递给组件。 我在声明某个地方时遇到两个问题:1)在哪里?在减速器中?在应用程序的化简器中很难找到所有方法。2)传递此功能。真?我
问题内容: 我正在尝试将状态栏的颜色更改为蓝色或其他某种颜色。 这可能吗,或者Apple不允许吗? 问题答案: 注意:此解决方案在iOS 13及更高版本下失败。 Plist中的第一个设置为 输出屏幕截图如下