如何从Android中正在更新的文本视图中替换颜色?
我已经在Android上开发了一个应用程序,能够检测蓝牙信号并在列表视图中显示。它显示名称、地址和rssi值。对于最后一个参数,我已经这样做了,以便不断更新。问题是,我希望rssi的值在更新其值时在2种不同颜色或更多颜色之间交替;例如,黑色的值为-83dBm,红色的更新值为-81dBm。我尝试过一种方法,但当它运行时,由于尝试更改颜色,它没有显示任何值。以下是我使用的代码: 新:代码编辑如何从Android中正在更新的文本视图中替换颜色?,android,colors,textview,Android,Colors,Textview,我已经在Android上开发了一个应用程序,能够检测蓝牙信号并在列表视图中显示。它显示名称、地址和rssi值。对于最后一个参数,我已经这样做了,以便不断更新。问题是,我希望rssi的值在更新其值时在2种不同颜色或更多颜色之间交替;例如,黑色的值为-83dBm,红色的更新值为-81dBm。我尝试过一种方法,但当它运行时,由于尝试更改颜色,它没有显示任何值。以下是我使用的代码: 新:代码编辑 public class BleDevicesAdapter extends BaseAdapter { p
public class BleDevicesAdapter extends BaseAdapter {
private final LayoutInflater inflater;
private final ArrayList<BluetoothDevice> leDevices;
private final HashMap<BluetoothDevice, Integer> rssiMap = new HashMap<BluetoothDevice, Integer>();
public BleDevicesAdapter(Context context) {
leDevices = new ArrayList<BluetoothDevice>();
inflater = LayoutInflater.from(context);
}
public void addDevice(BluetoothDevice device, int rssi) {
if (!leDevices.contains(device)) {
leDevices.add(device);
}
rssiMap.put(device, rssi);
}
public BluetoothDevice getDevice(int position) {
return leDevices.get(position);
}
public void clear() {
leDevices.clear();
}
public Integer getRSSI(int j){
BluetoothDevice device = leDevices.get(j);
return rssiMap.get(device);
}
@Override
public int getCount() {
return leDevices.size();
}
@Override
public Object getItem(int i) {
return leDevices.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
// General ListView optimization code.
if (view == null) {
view = inflater.inflate(R.layout.listitem_device, null);
viewHolder = new ViewHolder();
viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address);
viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name);
viewHolder.deviceRssi = (TextView) view.findViewById(R.id.device_rssi);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
BluetoothDevice device = leDevices.get(i);
final String deviceName = device.getName();
if (deviceName != null && deviceName.length() > 0)
viewHolder.deviceName.setText(deviceName);
else
viewHolder.deviceName.setText(R.string.unknown_device);
viewHolder.deviceAddress.setText(device.getAddress());
if(viewHolder.deviceRssi.getCurrentTextColor()==0x000000){
viewHolder.deviceRssi.setTextColor(0xFF0000);
viewHolder.deviceRssi.setText(""+rssiMap.get(device)+" dBm");
}
else {
viewHolder.deviceRssi.setTextColor(0x000000);
viewHolder.deviceRssi.setText(""+rssiMap.get(device)+" dBm");
}
return view;
}
private static class ViewHolder {
TextView deviceName;
TextView deviceAddress;
TextView deviceRssi;
}
公共类BleDeviceAdapter扩展了BaseAdapter{
私人充气机;
私人最终ArrayList leDevices;
private final HashMap rssiMap=new HashMap();
公共BleDeviceAdapter(上下文){
leDevices=newArrayList();
充气器=充气器。从(上下文);
}
公共设备(蓝牙设备,int rssi){
如果(!leDevices.contains(设备)){
添加(设备);
}
rssiMap.put(设备,rssi);
}
公共蓝牙设备getDevice(内部位置){
返回LED设备。获取(位置);
}
公共空间清除(){
leDevices.clear();
}
公共整数getRSSI(int j){
BluetoothDevice=leDevices.get(j);
返回rssiMap.get(设备);
}
@凌驾
public int getCount(){
返回leDevices.size();
}
@凌驾
公共对象getItem(int i){
返回leDevices.get(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
持票人持票人;
//通用ListView优化代码。
如果(视图==null){
视图=充气机。充气(R.layout.listitem\u设备,空);
viewHolder=新的viewHolder();
viewHolder.deviceAddress=(TextView)view.findViewById(R.id.device\u地址);
viewHolder.deviceName=(TextView)view.findViewById(R.id.device\u name);
viewHolder.deviceRssi=(TextView)view.findViewById(R.id.device\u rssi);
view.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)view.getTag();
}
BluetoothDevice=leDevices.get(i);
最后一个字符串deviceName=device.getName();
如果(deviceName!=null&&deviceName.length()>0)
viewHolder.deviceName.setText(deviceName);
其他的
viewHolder.deviceName.setText(R.string.unknown_设备);
viewHolder.deviceAddress.setText(device.getAddress());
if(viewHolder.deviceRssi.getCurrentTextColor()=0x000000){
viewHolder.deviceRssi.setTextColor(0xFF0000);
viewHolder.deviceRssi.setText(“+rssiMap.get(device)+”dBm”);
}
否则{
viewHolder.deviceRssi.setTextColor(0x000000);
viewHolder.deviceRssi.setText(“+rssiMap.get(device)+”dBm”);
}
返回视图;
}
私有静态类视图持有者{
TextView设备名称;
TextView设备地址;
文本视图设备;
}
有人知道如何解决这个问题吗?请帮忙!!这很简单
在适配器内
:
if(value > yourdesiredmax) TextView.setTextColor(Color.RED);
else TextView.setTextColor(Color.BLACK);
使用if statemens时,在
列表视图
适配器中,还必须提供else语句的相反状态通知。因此,原因是列表视图
恢复其视图
,事情可能会搞砸。嗨。我已经编辑了代码abov然后把整个适配器的代码放在哪里?我应该把你放的代码放在哪里?value和yourdiremax是什么意思?这就是你的文本应该变成红色的条件。你可以把任何你想要的作为你的条件