2011-07-12 39 views
5

Tôi đã dành hai ngày để cố gắng sắp xếp vấn đề này. Nếu bất cứ ai có thể giúp tôi sẽ được đánh giá ồ ạt.Chế độ xem danh sách tùy chỉnh với hai nút trong mỗi hàng

Những gì tôi đang cố gắng để đạt được:

Có một ListView, theo đó người chơi có thể thêm các mục mới (người chơi), thông qua một trường văn bản (đối với tên người chơi), và sau đó một nút gửi. Trong mỗi trường của ListView, tôi hiển thị tên người chơi và sau đó là hai ImageButton. Một với một biểu tượng nam, và một với một biểu tượng nữ. Biểu tượng nam được bật theo mặc định và người dùng có thể đặt trình phát là nam hoặc nữ bằng cách bật hoặc nút nam hoặc nút nữ. Cuối cùng, khi người dùng chuyển sang màn hình tiếp theo (hoạt động mới), ứng dụng sẽ lưu tên người chơi và giới tính đính kèm vào một số hình thức lưu trữ và tiến hành hoạt động tiếp theo.

Những gì tôi đã đạt được:

Tôi có một bộ chuyển đổi mảng đơn giản, mà khi người chơi thêm một tên người chơi mới vào danh sách, tôi chạy notifyDataSetChanged() trên đó. Bộ điều hợp cũng được đặt để sử dụng tệp bố cục hàng tùy chỉnh. Bên trong tệp bố cục, có vẻ như sau:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="wrap_content"> 
    <RelativeLayout android:layout_height="wrap_content" 
     android:layout_width="fill_parent" android:id="@+id/relativeLayout1" android:layout_marginTop="5dp"> 
     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:id="@+id/playerName" 
      android:layout_centerVertical="true" android:text="Derp" android:textStyle="bold" android:layout_marginLeft="5dp" android:textSize="22dp" android:textColor="@color/male_blue"></TextView> 
     <ImageButton android:layout_height="60dp" 
      android:layout_width="60dp" android:onClick="maleClickHandler" 
      android:src="@drawable/male_icon_settings" android:id="@+id/buttonA" android:layout_alignParentRight="true" android:layout_marginRight="65dp"></ImageButton> 
     <ImageButton android:onClick="femaleClickHandler" 
      android:layout_height="60dp" android:layout_width="60dp" android:id="@+id/buttonB" 
      android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:src="@drawable/female_icon_settings"></ImageButton> 
    </RelativeLayout> 
</LinearLayout> 

Hai nút trên mỗi hàng tham chiếu đến phương thức trong tệp lớp. Đây là mã của tôi cho điều này:

public void maleClickHandler(View v) { 

     RelativeLayout vwParentRow = (RelativeLayout) v.getParent(); 
     ImageButton maleButton = (ImageButton) vwParentRow.getChildAt(1); 
     maleButton.setImageDrawable(getResources().getDrawable(
       R.drawable.male_icon_selected)); 
     vwParentRow.refreshDrawableState(); 
    } 

    public void femaleClickHandler(View v) { 

     RelativeLayout vwParentRow = (RelativeLayout) v.getParent(); 
     ImageButton femaleButton = (ImageButton) vwParentRow.getChildAt(2); 
     femaleButton.setImageDrawable(getResources().getDrawable(
       R.drawable.female_icon_selected)); 
     vwParentRow.refreshDrawableState(); 
    } 

tôi chưa thực hiện bất kỳ liên kết nối giữa hai nút này, chỉ cho phép một để được hoạt động tại một thời điểm, hoặc một đến thậm chí untoggle, vì tôi nghĩ tôi có thể đang sử dụng sai phương pháp hoàn toàn.

Vấn đề:

Sau khi thêm các mục mới vào danh sách, SAU Toggling một và/hoặc con đực khác/nút nữ, mọi thứ trở nên thực sự buggy, và các nam/nữ toggled biểu tượng có thể di chuyển vì nó nên, cùng với chuỗi trình phát đính kèm, hoặc nhiều khả năng, những người được bật sẽ ở trên hàng đầu tiên đó (vị trí mảng 0 của danh sách) hoặc thậm chí di chuyển vào vị trí danh sách thứ hai và tự sao chép bản thân như đang được chuyển sang hàng ở trên.

Làm cách nào bạn có thể trợ giúp ...?

Tôi có kèm theo hình ảnh bên dưới của màn hình của tôi, từ các giả lập, để giúp minh họa điểm của tôi Screenshot!

Tôi nghĩ rằng tôi có thể cần phải sử dụng một số hình thức của bộ chuyển đổi tùy chỉnh; Tôi đã đọc rất nhiều về chủ đề này, nhưng tôi không thể tìm thấy bất cứ điều gì liên quan đến những gì tôi đang cố gắng đạt được, vì vậy nếu bạn có thể chỉ cho tôi đúng hướng, hoặc thậm chí cố gắng kết hợp giải pháp cơ bản nhất loại vấn đề, tôi sẽ rất biết ơn.

Cuối cùng, khi tôi làm việc này, hình thức lưu trữ nào là tốt nhất để lưu trữ tên người chơi và giới tính của họ? Tôi muốn người dùng có thể giữ danh sách người chơi sau khi họ thoát khỏi ứng dụng và khởi động lại nó.

Cảm ơn bạn đã trợ giúp! :)

Trả lời

1

Bạn sẽ cần sử dụng Bộ điều hợp tùy chỉnh, chính nó sẽ có thể theo dõi cờ nam/nữ cho từng mục nhập đó.

Phương pháp của bạn sẽ không hoạt động vì trạng thái của các nút được quản lý bằng phương pháp getView của bộ điều hợp. Ngay cả khi bạn thay đổi chúng bằng cách đào bới con cái, lần sau khi phương thức getView được gọi, nó sẽ làm hỏng mọi thứ.

+0

Cảm ơn bạn, tôi nghi ngờ tôi phải làm điều gì đó dọc theo những dòng này; Cảm ơn bạn đã làm rõ điều này :) –

1

Rất nhiều điều này phụ thuộc vào số lượng người chơi bạn mong đợi có trong trò chơi của mình. Nếu đó là một con số có khả năng phù hợp trên một màn hình (hoặc rất gần với nó), thì ListView thực sự là không cần thiết. ListView s và bộ điều hợp không thực sự là một phương pháp tiện lợi nhiều như chúng là một công cụ để cải thiện hiệu suất. Chúng chỉ ghi nhớ những gì trên màn hình và tái chế các dòng cũ, đã được hiển thị View cho các hàng mới khi bạn cuộn - đây là lý do tại sao một số trạng thái nút của bạn đang được sao chép sang các hàng khác nhau.

Có một vài cách bạn có thể khắc phục điều này:

  • Bạn có thể viết một tùy chỉnh thiết bị tiếp hợp mình là Kumar Bibek gợi ý. Trong bộ điều hợp này, bạn sẽ muốn ghi đè phương thức getView() để đảm bảo mỗi nút có trạng thái chính xác mỗi khi phương thức được gọi.

  • Bạn cũng có thể chỉ cần sử dụng ScrollView được điền bằng một vài hàng theo cách thủ công nếu bạn không có đủ dữ liệu để đảm bảo sử dụng ListView. Bằng cách này, bạn sẽ không cần phải lo lắng về các hàng của bạn đang được tái chế và nút trạng thái không được.

Bên cạnh đó, bạn có thể muốn xem xét sử dụng một RadioGroup cho bộ chọn giới tính (Tôi không thể nghĩ ra một sử dụng tốt hơn nhiều cho nút radio kể từ khi họ được thực hiện cho được loại trừ lẫn nhau).

Ngoài ra, bên ngoài LinearLayout trong tệp XML hàng của bạn trông không cần thiết.

Theo như lưu trữ, bạn có thể sử dụng cơ sở dữ liệu SQLite hoặc SharedPreferences. SharedPreferences không yêu cầu thiết lập, nhưng tôi cảm thấy cơ sở dữ liệu SQLite phù hợp hơn với nhu cầu của bạn.

+0

Cảm ơn bạn rất nhiều, tôi nghĩ rằng tôi sẽ giới thiệu lời khuyên của bạn với Radio Group và ScrollView. Cảm ơn nhiều! : D –

+0

Bạn đang rất hoan nghênh. Khi bạn nhận được câu trả lời thỏa mãn bạn, bạn nên luôn đánh dấu câu trả lời đó là câu trả lời đúng bằng cách nhấp vào dấu kiểm trống bên cạnh. Khi bạn đã hỏi một số câu hỏi, "phần trăm chấp nhận" của bạn sẽ hiển thị trong huy hiệu người dùng và tỷ lệ phần trăm cao sẽ khuyến khích người khác cung cấp cho bạn câu trả lời có chất lượng. :) –

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