2012-10-12 35 views
6

Trong ứng dụng của tôi, tôi có ngăn bên trái chứa chế độ xem danh sách. Lựa chọn được thực hiện trong chế độ xem danh sách này, sau đó gọi cho dữ liệu có liên quan, cập nhật ngăn bên phải và các liên kết và thành phần khác trong hoạt động. Do thiết kế này, ngăn bên trái phải luôn có lựa chọn được thực hiện để cung cấp cho phần còn lại của các giá trị hữu ích hoạt động.Android: đặt mục danh sách được xem theo chương trình thành trạng thái đã chọn

Trong phương thức onCreate hoạt động của tôi, tôi gọi sau đây để chọn phần tử đầu tiên trong danh sách theo mặc định. (programList là listview của tôi)

programList.performItemClick(programList, 0, programList.getItemIdAtPosition(0); 

Tất cả đều hoạt động tốt và khung nhìn tải như mong đợi với các giá trị phù hợp, ngoại trừ một điều.

Tôi đã thêm một công cụ chọn có thể kéo cho chế độ xem danh sách làm nổi bật phần tử đã chọn. Khi mục được nhấp vào vật lý trong trình mô phỏng nó sẽ làm nổi bật (tôi đang sử dụng CHOICE_MODE_SINGLE), nhưng nó không làm nổi bật khi gọi performItemClick(). Tôi đã nhìn xung quanh để được trợ giúp về stackoverflow và cố gắng sử dụng sau đây trước khi nhấp chuột, nhưng nó đã không tạo sự khác biệt.

programList.requestFocusFromTouch(); 
    programList.setSelection(0); 

Từ đọc API, có vẻ như phương thức setSelection không đặt trạng thái của mục trong giao diện cảm ứng và từ kết quả của tôi, dường như phương thức performItemClick cũng không. Tôi cũng đã cố gắng sử dụng

programList.getAdapter().getView(0, null, null).setSelected(true); 

Sau đó, tôi có thể đọc trạng thái của chế độ xem văn bản và thấy nó không thay đổi nội dung hiển thị trên màn hình.

Có điều gì đó trong onCreateMethod đang ngăn trạng thái của nút được vẽ khác nhau không? Tôi đã cố gắng vô hiệu hóa các drawable bên trong xem văn bản cá nhân và vô hiệu hóa các văn bản xem chính nó, nhưng điều đó đã không giúp đỡ. Tôi cũng đã thử thay đổi nền của chế độ xem văn bản, nhưng có vẻ như bộ chọn mà tôi đã đặt điều chỉnh hoặc được vẽ ở phía trước. Tôi biết rằng tôi có textView chính xác bởi vì tôi đã sử dụng getText để đọc nội dung bên trong.

Nếu có ai đó có thể giúp tôi giải quyết vấn đề này hoặc chỉ cho tôi một giải pháp, nó sẽ được đánh giá cao.

Trả lời

4

Bí quyết là ghi đè phương thức getView() của bộ điều hợp. Hãy thử điều này:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final View renderer = super.getView(position, convertView, parent); 
    if (position == index_of_selected_item) { 
     renderer.setBackgroundResource(android.R.color.darker_gray); 
    } 
    return renderer; 
} 

Tất nhiên, bạn có thể đặt màu nền thành bất kỳ màu nào bạn muốn cho biết đó là mục "hoạt động".

+0

Cảm ơn. Có cách nào để thực hiện công việc này thông qua việc sử dụng phương thức listview.setSelector() hay tôi sẽ phải thiết lập phần còn lại của các trạng thái bằng cách sử dụng getView() Bộ setSelector thuận tiện hơn nhiều vì nó chỉ là một tài nguyên xml. Tôi ước gì tôi biết điều gì xảy ra khác khi tôi nhấp chuột vào trình mô phỏng và điều xảy ra khi tôi gọi sự kiện nhấp chuột theo chương trình. – ndw

+0

Điều này không cho phép tôi bỏ chọn mục này, ngay cả khi tôi thêm khác vào câu lệnh của bạn và đặt thành màu khác. Chế độ xem chỉ được gọi ban đầu khi lượt xem tải. Khi nền cho mục xem danh sách đó được đặt, nó sẽ vẫn như vậy. [this] (http://stackoverflow.com/questions/10296846/android-listview-select-first-item-after-loading-datas) đã giúp tôi gần gũi nhất, nhưng lời giải thích của anh ấy chưa hoàn chỉnh. – ndw

+2

Làm cách nào tôi có thể nhận giá trị index_of_selected_item – Dimitri

Các vấn đề liên quan