在ListView的行中更改ImageView背景

时间:2014-05-15 21:34:38

标签: android listview imageview row

我遇到了一个我认为无法解决的问题。

我想更改ListView中一行内的ImageView背景。该行是一个带有两个TextView和一个ImageView的自定义视图。

我有ListView id,包含我想编辑的ImageView的行号和当然的ImageView id。

有什么方法可以访问正确的ImageView吗?

感谢您的回答。

更新

更好的解释: 我有一个设备列表。它们从适配器加载,该适配器从数组中获取值。 创建列表后,我开始一个新活动,发送一个包含设备地址的数组。 另一个活动接收阵列,扫描范围内的设备(蓝牙)并获取这些设备的列表。 然后我面对两个数组,如果有一个范围内的设备,我改变ListView相对于该设备的图像。数组的索引是ListView中的行号。

我认为我不需要发布任何代码,因为从一个活动发送到另一个的数组是通过Intent发出的,并且可以正常工作。调试我有阵列机器人。

我只需要一种方法来访问该列表行中的图像。

2 个答案:

答案 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”