我遇到了一个我认为无法解决的问题。
我想更改ListView中一行内的ImageView背景。该行是一个带有两个TextView和一个ImageView的自定义视图。
我有ListView id,包含我想编辑的ImageView的行号和当然的ImageView id。
有什么方法可以访问正确的ImageView吗?
感谢您的回答。
更新
更好的解释: 我有一个设备列表。它们从适配器加载,该适配器从数组中获取值。 创建列表后,我开始一个新活动,发送一个包含设备地址的数组。 另一个活动接收阵列,扫描范围内的设备(蓝牙)并获取这些设备的列表。 然后我面对两个数组,如果有一个范围内的设备,我改变ListView相对于该设备的图像。数组的索引是ListView中的行号。
我认为我不需要发布任何代码,因为从一个活动发送到另一个的数组是通过Intent发出的,并且可以正常工作。调试我有阵列机器人。
我只需要一种方法来访问该列表行中的图像。
答案 0 :(得分:0)
我找到了解决方案。
我会在这里发布代码,如果有人,有一天会有我的问题:
// We have the listview, list of online devices and the list of our devices!
// Init ListView
ListView device_list = (ListView) findViewById(R.id.deviceListView);
// Loop for all the online devices found
for (int j = 0; j < mLeDevices.size(); j++){
// Get the online device address
BluetoothDevice device = mLeDevices.get(j);
String deviceAddress = mLeDevices.get(j).getAddress();
// Loop for all the devices in the ListView
for (int i = 0; i < device_address.size(); i++) {
// Compare devices address
if (device_address.get(i).compareTo(deviceAddress) == 0) {
int visiblePosition = device_list.getFirstVisiblePosition();
View v = device_list.getChildAt(i - visiblePosition);
ImageView state = (ImageView) v.findViewById(R.id.item_state);
state.setImageResource(R.drawable.led_on);
}
}
}
列表的元素不超过5个,因此列表滚动和丢失索引没有问题。 我其实想问一个问题。假设ListView中的位置从0开始是正确的吗?或者第一个元素索引是1?
答案 1 :(得分:0)
如果我理解你的问题,那么你可以使用以下想法
如果你知道图像视图的位置,那么你可以在你的getView方法中尝试这样的东西
imageView.setBackground(R.drawable.normalBackground);
if(position==yourRequiredPosition){
imageView.setBackground(R.drawable.newBackground);
}
这样它将始终为每行中的imageView设置normalBackground,但是对于yourRequiredposition行,将设置newBackground。唯一的问题是你必须找到一个方法来找出“yourRequiredPosition”