2012-06-26 73 views
7

我做了一個應用程序使用聯繫人同步。我列出了以下聯繫信息與照片,名稱和編號。我成功列出所有這些東西在自定義ListView,但我不能單擊ListView。它看起來像鎖定,無法點擊它。我無法在android中單擊ListView?

但我對另一個活動做了同樣的過程。使用自定義ListView但我可以點擊這個視圖,它工作正常。

什麼問題?這裏是我的示例代碼:

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"); 

這裏ContactList是一個類,它有imageBlob的聯繫人姓名,號碼和字節[]。如果圖像爲空,我將默認的ic_launcher設置爲聯繫人圖像。適配器類是:

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; 
    } 
} 

我有超過100個聯繫人,所以只添加了3個對象。在此聯繫人列表中,我成功地收到了聯繫人圖片,姓名,號碼。

什麼問題ListView無法點擊?我希望你中的任何一個人都會引導我。提前致謝。


謝謝大家。現在只需在我的所有子視圖中添加android:focusable="false"即可獲得結果。感謝你的指導。

回答

8

在嵌套Views中,子視圖總是首先獲取所有觸摸事件。如果你想要父視圖(在你的情況下,listView行),爲了獲得一個觸摸事件,你必須在子事件上返回false或者在清單中將它們設置爲android:clickable="false"

+0

此方法不起作用?任何其他解決方案 – Amarnath

+0

現在感謝朋友的工作。 – Amarnath

+0

如果它的工作可以自由接受答案 – thepoosh

7

添加

android:focusable="false" 

android:clickable="false" 

像的ImageView,TextView的,多選等..你行的佈局manage_track_list_custom_view.xml

3

我意味着每個子視圖認爲你必須設置所有可點擊的東西,例如。複選框,按鈕等不可聚焦(在適配器類中)。

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

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

您可以將onclick listner設置爲ContactListAdapter類中的View行。

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

試試這個:

當您添加列表視圖,請撥打

setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); 

有更多信息看here

+1

我認爲這應該被標記爲答案,因爲這允許列表視圖中的項目在列表項目自己接收事件的同時被點擊。 – lfxgroove

0

當我無法點擊列表視圖中某個項目的其他部分時,我也有同樣的問題,只需點擊該項目內的textview或imageview即可。所以,我把我的TextView:

android:layout_width="fill_parent" 

我的項目是這樣的:

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

而且因爲我點擊TextView的點擊事件工作的罰款。希望能幫助任何人有同樣的問題。

相關問題