Tôi đã nhận được công việc Listview với D-pad có thể chuyển tiêu điểm bên trong một mục danh sách. Đây là cách tôi giải quyết nó. Trước tiên, hãy để chế độ xem danh sách của bạn là mục có thể đặt tiêu điểm. LƯU Ý: Nếu bạn cố gắng đặt ItemsCanFocus thành false sau này trong mã của bạn, bạn sẽ thấy mục danh sách của bạn không thể lấy tiêu điểm nữa ngay cả khi bạn đặt lại thành true, do đó đừng làm điều đó.
mDpadListView.setItemsCanFocus(true);
Sau đó, bạn cần trường để theo dõi mục danh sách nào được chọn hiện tại. Ở đây tôi đặt ViewHolder trong thẻ listItem trong Bộ điều hợp.
mDpadListView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
if (view.getTag() != null) {
DpadListAdapter.ViewHolder holder = (ViewHolder) view.getTag();
if (holder.shortCut != null && holder.shortCut.isShown()) {
currentSelectView = view;
} else {
currentSelectView = null;
}
} else {
currentSelectView = null;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Thứ ba, ghi đè lênKeyDown() trong Phương thức hoạt động để điều khiển lên, xuống, trái, phải cho phím D-pad.
Khi người dùng nhấn nút phải trên D-pad, tôi cho phép listview là clearFoucs() và để ImageView bên trong lấy tiêu điểm.
Khi người dùng nhấn lên, xuống hoặc xuống, mục ImageView trong danh sách sẽ xóa tiêu điểm và danh sáchXem lấy tiêu điểm một lần nữa.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (currentSelectView != null) {
DpadListAdapter.ViewHolder holder =
(ViewHolder) currentSelectView.getTag();
mDpadListView.clearFocus();
holder.shortCut.setFocusable(true);
holder.shortCut.requestFocus();
return true;
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
if (currentSelectView != null) {
DpadListAdapter.ViewHolder holder =
(ViewHolder) currentSelectView.getTag();
if (holder.shortCut.hasFocus()) {
holder.shortCut.clearFocus();
holder.shortCut.setFocusable(false);
mDpadView.requestFocus();
return true;
}
}
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
Xin chào, tôi cần trợ giúp, tôi muốn biết làm thế nào nếu tôi chọn một mục có d-pad, sau đó thay đổi màu nền. – wdyz
bạn cần sử dụng danh sách trạng thái có thể vẽ trên hình nền của mặt hàng của bạn, cung cấp cho android: state_focused = "true" một hình ảnh khác với trạng thái bình thường. ref: http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList – henry74918
Hi, những gì là currentSelectView – Andrain