2012-06-26 7 views
7

Tôi đã tạo một ứng dụng bằng cách sử dụng đồng bộ hóa liên hệ. Tôi liệt kê thông tin liên hệ sau đây với ảnh, tên và số. Tôi liệt kê thành công tất cả những điều đó trong một tùy chỉnh ListView, nhưng tôi không thể nhấp vào ListView. Có vẻ như đã bị khóa, Không thể nhấp vào nó.Tôi không thể nhấp vào ListView trong Android?

Nhưng tôi đã thực hiện thủ tục tương tự cho hoạt động khác. Sử dụng tuỳ chỉnh ListView nhưng tôi có thể nhấp vào chế độ xem này và nó hoạt động tốt.

Sự cố là gì? đây là mẫu mã của tôi:

ListView settingsList = (ListView) findViewById(R.id.manage_track_listView); 
    ArrayList<ContactList> MySettingsList = new ArrayList<ContactList>(); 

    ContactList setting1 = new ContactList("contact name 1", "Number 1", null); 
    ContactList setting2 = new ContactList("contact name 2", "Number 2", null); 
    ContactList setting3 = new ContactList("contact name 3", "Number 3", null); 

    MySettingsList.add(setting1); 
    MySettingsList.add(setting2); 
    MySettingsList.add(setting3); 

    ContactList list[] = new ContactList[MySettingsList.size()]; 

    for(int i=0;i<MySettingsList.size();i++) { 

     ContactList mySettings = MySettingsList.get(i); 
     list[i] = new ContactList(mySettings.getName(), mySettings.getNumber(), mySettings.getImageIcon()); 
    } 

    ContactListAdapter adapter = new ContactListAdapter(this, R.layout.manage_track_list_custom_view, list); 
    settingsList.setAdapter(adapter); 
    System.out.println("before listener"); 
    settingsList.setOnItemClickListener(new OnItemClickListener() { 

     @Override 


     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      // TODO Auto-generated method stub 

      System.out.println("Clicked " + position); 
     } 
    }); 
    System.out.println("after listener"); 

Đây là danh sách liên hệ có tên liên hệ, số và byte [] cho imageBlob. Nếu hình ảnh là null, tôi đặt ic_launcher mặc định làm hình ảnh liên hệ. Lớp bộ điều hợp là:

public class ContactListAdapter extends ArrayAdapter<ContactList> { 

    Context context; 
    int layoutResourceId; 
    ContactList objects[] = null; 

    View row; 

    public ContactListAdapter(Context context, int layoutResourceId, ContactList[] objects) { 
     super(context, layoutResourceId, objects); 
     // TODO Auto-generated constructor stub 

     this.context = context; 
     this.layoutResourceId = layoutResourceId; 
     this.objects = objects; 
     System.out.println(objects[1].getName()); 
     System.out.println(objects[1].getNumber()); 
     System.out.println(objects[1].getImageIcon()); 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     row = convertView; 
     final ContactListHolder holder; 

     if (row == null) { 

      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new ContactListHolder(); 
      holder.image = (ImageView) row.findViewById(R.id.contactImage); 
      holder.name  = (TextView) row.findViewById(R.id.contactName); 
      holder.number = (TextView) row.findViewById(R.id.contactNumber); 
      holder.check = (CheckBox) row.findViewById(R.id.selectedContact); 

      row.setTag(holder); 

     } else { 

      holder = (ContactListHolder)row.getTag(); 
     } 

     ContactList contact = objects[position]; 
     if(contact.imageIcon != null) { 

      Bitmap imgBitmap = BitmapFactory.decodeByteArray(contact.imageIcon, 0, contact.imageIcon.length); 
      holder.image.setImageBitmap(imgBitmap); 
     } else { 

      holder.image.setImageResource(R.drawable.ic_launcher); 
     } 

     holder.name.setText(contact.name); 
     holder.number.setText(contact.number); 
     holder.check.setChecked(objects[position].isSelected());  

     return row; 

    } 

    static class ContactListHolder { 

     ImageView image; 
     TextView name; 
     TextView number; 
     CheckBox check; 
    } 
} 

Tôi có hơn 100 liên hệ để chỉ thêm 3 đối tượng. Trong danh sách liên lạc này, tôi đã nhận được hình ảnh, tên, số liên lạc thành công.

Sự cố ListView không thể nhấp là gì? Tôi hy vọng bất kỳ một trong những u sẽ hướng dẫn tôi. Cảm ơn trước.


Xin cảm ơn tất cả. bây giờ có kết quả bằng cách chỉ thêm android:focusable="false" trong tất cả các chế độ xem con của tôi. cảm ơn cho ur hướng dẫn.

Trả lời

8

trong chế độ xem lồng nhau, chế độ xem con luôn nhận được tất cả các sự kiện chạm trước tiên. nếu bạn muốn xem cha mẹ (trong trường hợp của bạn, hàng listView), để có được một sự kiện cảm ứng, bạn phải trả về false trên các sự kiện con hoặc đặt chúng là android:clickable="false" trong tệp kê khai.

+0

phương pháp này không hoạt động? bất kỳ giải pháp khác – Amarnath

+0

Cảm ơn bạn bây giờ nó hoạt động. – Amarnath

+0

nếu nó hoạt động cảm thấy tự do để chấp nhận câu trả lời – thepoosh

7

thêm

android:focusable="false" 

android:clickable="false" 

cho từng xem con như ImageView, TextView, hộp vv ... của hàng của bạn bố trí phương tiện manage_track_list_custom_view.xml

3

tôi nghĩ rằng bạn phải đặt tất cả những thứ có thể nhấp của bạn, ví dụ như. các hộp kiểm, các nút, vv .. không thể lấy nét (trong lớp bộ điều hợp).

 holder.yourButton.setFocusable(false); 
     holder.yourButton.setFocusableInTouchMode(false); 

     holder.yourCheckbox.setFocusable(false); 
     holder.yourCheckbox.setFocusableInTouchMode(false); 
0

Bạn có thể đặt người theo dõi onclick thành hàng Chế độ xem trong lớp ContactListAdapter.

holder.check.setChecked(objects[position].isSelected());  
     row.setOnclickListner(new Onclicklistner(){ 
      // Your code here 
     }); 
    return row; 
1

Hãy thử điều này:

Khi bạn thêm các ListView, gọi

setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); 

Có một cái nhìn here để biết thêm.

+1

Tôi nghĩ rằng điều này nên được đánh dấu là câu trả lời vì điều này cho phép các mục bên trong một lần xem danh sách được bấm cùng lúc với các mục danh sách để nhận sự kiện. – lfxgroove

0

Tôi có cùng một vấn đề khi tôi không thể nhấp vào phần khác của một mục trong chế độ xem danh sách, chỉ có thể nhấp vào trong chế độ xem văn bản hoặc hình ảnh bên trong mục đó.Vì vậy, tôi đặt TextView tôi:

android:layout_width="fill_parent" 

mục của tôi như thế này:

<relative> 
[image][textview] 
relative/> 

Và sự kiện nhấn làm việc tốt vì tôi bấm vào TextView. Hy vọng sẽ giúp bất cứ ai có cùng một vấn đề.