我正在构建一个简单的列表视图,该视图将吸收一系列检测到的项目并将其添加到列表中。我希望能够在单击它们时更改这些视图的颜色。但是,我正在努力创建一种访问单个视图的方法,以便可以更改其颜色。此代码基于Android Studio示例BluetoothLeGatt。我曾尝试寻找here之类的地方,但无济于事。
将检测到的设备添加到列表的类
private class LeDeviceListAdapter extends BaseAdapter {
private ArrayList<BluetoothDevice> mLeDevices;
private LayoutInflater mInflator;
public LeDeviceListAdapter() {
super();
mLeDevices = new ArrayList<BluetoothDevice>();
mInflator = DeviceScanActivity.this.getLayoutInflater();
}
public void addDevice(BluetoothDevice device) {
if (!mLeDevices.contains(device)) {
mLeDevices.add(device);
}
}
public BluetoothDevice getDevice(int position) {
return mLeDevices.get(position);
}
public void clear() {
mLeDevices.clear();
}
@Override
public int getCount() {
return mLeDevices.size();
}
@Override
public Object getItem(int i) {
return mLeDevices.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 = mInflator.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);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
BluetoothDevice device = mLeDevices.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());
return view;
}
}
OnListClick代码
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
final BluetoothDevice device = mLeDeviceListAdapter.getDevice(position);
if (device == null) return;
getListView().getItemAtPosition(position);
//change background color here.
}
这里我应该能够使用 getListView()。getItemAtPosition(position); 访问单个元素,但是我不知道如何使用它来更改背景颜色,因为它不提供我可以访问视图本身。
ViewList的XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/device_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp"/>
<TextView android:id="@+id/device_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"/>
</LinearLayout>
如果有人可以提出改变Android Studio实现的方法,我将不胜感激。由于不熟悉Android开发,因此我尝试使用此代码。
答案 0 :(得分:0)
您在此方法的第二秒获得了View参数
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
v.setBackgroundColor(Color.parseColor("#ffffff"));
}
如果要更改onTouch颜色,请使用此
在您的bg.xml
文件夹中创建一个drawable
。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/bgalt" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/bgalt" />
<item android:drawable="@drawable/bgnorm" />
</selector>
将此可绘制对象设置为父布局元素
<LinearLayout
background="@drawable/bg"
clickable="true"
...>
</LinearLayout>
答案 1 :(得分:0)
您拥有的OnListClick代码(查看v) 使用此v,您可以访问与单击的视图相关的属性。