2012-02-08 33 views
9

Tôi đoán điều gì đó thực sự đơn giản, có thể là cài đặt trong chế độ xem danh sách hoặc phân đoạn. Nhưng tôi không thể tìm thấy giải pháp cho nó trong vài giờ ngay bây giờ. Vì vậy .. Tôi có một ListView như thế nàynhấp vào phân đoạn gọi hoạt động đằng sau nó

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/content" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:isScrollContainer="true"> 

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#fffafa" 
    /> 

</RelativeLayout> 

khi ai đó nhấp vào mục danh sách. Tôi thay thế nó bằng một đoạn như thế này

FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction ft = manager.beginTransaction(); 
    ft.replace(R.id.content, newFragment); 

    ft.addToBackStack(null); 
    ft.commit(); 

Nếu tôi nhấp vào mục trên danh sách, The whole list được thay thế bằng một đoạn (*) bao gồm một nút và và vài trường văn bản. Phân đoạn thay thế danh sáchXem đúng thông tin về mục đó. Khi tôi bấm lại nó đúng cách sẽ đưa khung nhìn danh sách trở lại.

Vấn đề là nếu tôi nhấp vào nền của * nó hoạt động như thể tôi sẽ bấm vào danh sách đằng sau nó .. và mang mảnh vỡ về mục đó lên phía trước. Tôi có thể nhấp vô tận trên nền để mang các mảnh khác. Tôi có thể quay lại danh sách bằng cách nhấp lại vào, quay lại ..

Tại sao đoạn này trong suốt? Làm thế nào tôi có thể sửa lỗi này?

Trả lời

6

Tôi tin rằng vấn đề là phương pháp replace không thay thế ListView. Nó chỉ thay thế các mảnh khác nằm trong thùng chứa. Trong trường hợp cụ thể này không có. Do đó, về cơ bản bạn đang thêm phân đoạn của mình lên trên ListViewRelativeLayout cho phép các chế độ xem nằm trên cùng một phần khác. Khi bạn bấm vào mảnh, bạn không hoàn toàn xử lý nó, vì vậy nó đi qua khung nhìn cơ sở là ListView.

Giải pháp đơn giản, nhanh chóng và bẩn sẽ là truy xuất đối tượng ListView và tự xóa đối tượng khỏi vùng chứa hoặc đặt chế độ hiển thị là GONE. Một giải pháp tốt hơn là sử dụng ListFragment để hiển thị kết quả mong đợi.

+0

làm cho cảm giác hoàn hảo Deev, cảm ơn bạn - sẽ cố gắng mà bây giờ – AndroidGecko

+0

i redisgned nó để danh sách đó là một Fragment bắt đầu. Sau đó ghi đè obBackPressed để nó chặn việc lấy danh sách này ra khỏi backstack mảnh nếu (manager.getBackStackEntryCount() == 1) và nó hoạt động tốt. cảm ơn! – AndroidGecko

+0

Tôi đã có cùng một vấn đề, nhưng với tất cả các mảnh. Tôi đã thêm đoạn của mình theo cùng cách thức mà ListView đã được thêm vào: thông qua xml. Tôi chuyển sang sử dụng FragmentManager để thổi phồng mảnh vỡ và bây giờ mọi thứ hoạt động. Vì vậy, vấn đề là bất cứ điều gì không được thêm vào bởi FragmentManager sẽ không được gỡ bỏ. –

7

Tôi đã giải quyết vấn đề tương tự bằng cách thêm android:clickable="true" vào phần tử hoạt động như thể nó "trong suốt". Làm cho nó có thể nhấp được đảm bảo rằng các sự kiện nhấp chuột đã được xử lý bởi nó thay vì được chuyển đến các khung nhìn bên dưới.

+0

vấn đề với điều này là nó không dừng phản hồi xúc giác trên các vùng trống. –

2

Đặt thuộc tính có thể nhấp thành true để sự kiện nhấp chỉ được sử dụng trên đoạn tiền cảnh.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:clickable="true" /> 
2

Vì vậy, tôi đã có chính xác cùng một vấn đề, tôi vẫn không biết lý do tại sao, nhưng chắc chắn thêm của bạn android: nhấp được = "true" đến roovView của bố trí đoạn thứ 2 của bạn.

một cái gì đó như thế này:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#ffffff" 
android:clickable="true" 
android:orientation="vertical"> 
.....any content for your item (2nd fragment)..... 
</LinearLayout> 
Các vấn đề liên quan