2011-02-04 28 views
7

Tôi đang sử dụng mã bên dưới để duyệt qua danh sách của mình, nó hoạt động tốt nếu các Mục Danh sách hiển thị.Làm thế nào để có được một số mục danh sách từ Listview?

Nếu danh sách có thể cuộn thì các mục không nhìn thấy được sẽ không truy cập bằng mã này. Làm thế nào để đi qua tất cả các mục danh sách mà là visble + mục không nhìn thấy được.

for(int i=0;i<list.getCount;i++) 
{ 
    View v = list.getChildAt(i); 
    TextView tv= (TextView) v.findViewById(R.id.item); 
    Log.d("","ListItem :"+tv.getText()); 
} 

Trả lời

3

Gần đây tôi đã làm điều này. Giả sử tôi muốn ẩn một nút trên một listItem. Sau đó, trong getView của bộ điều hợp danh sách thêm nút đó trong một vector toàn cầu. như dưới đây.

Button del_btn = viewCache.getFrame(); 
view_vec.add(del_btn); 

Đây viewCache là một đối tượng của lớp ViewCache, được sumthing như dưới đây -

class ViewCache 
    {   

     private View baseView;  
     private Button button; 


     public ViewCache(View baseView) 
     {  
      this.baseView = baseView; 
     } 

     public Button getButton() { 
      if(button == null) { 
       button = (Button) baseView.findViewById(R.id.DeleteChatFrndBtn); 
      } 
      return button; 
     } 
    } 


//it is necessary sometimes because otherwise in some cases the list scroll is slow. 

Bây giờ bạn muốn nút hữu hình của listItem onClicking một số nút khác. Sau đó, mã này là như dưới đây -

public void onClick(View v) { 
    // TODO Auto-generated method stub 

    switch(v.getId()) { 

     case R.id.EditChatFrndBtn: 
      length = view_vec.size(); 
      for(int i = 0; i < length; i++) { 

       Button btn = (Button) view_vec.elementAt(i); 
       btn.setVisibility(View.VISIBLE); 

      } 
      doneBtn.setVisibility(View.VISIBLE); 
      editBtn.setVisibility(View.INVISIBLE); 
      break; 
    } 
} 

Thay vì R.id.EditChatFrndBtn đặt nút id của bạn trên nhấp trong đó bạn sẽ/invisible button hữu hình của listItem.

+0

Xin chào, tôi cần hiển thị các nút trên mỗi mục danh sách khi nhấp vào nút khác, trong tiêu đề của tôi. Bạn có thể giải thích vectơ xem này mà bạn đã sử dụng và getFrame() có tác dụng gì không? – Nitish

+0

Xem bạn phải theo dõi tất cả các nút (lượt xem) tại thời điểm tạo. Otw sau đó bạn không thể truy cập mỗi lần xem nút danh sách một cách riêng biệt. Khi mọi chế độ xem nút được tạo, tôi chèn nó vào chế độ xem vector.Điều này sẽ theo dõi tất cả các nút xem mục danh sách. – Debarati

+0

OK và Viewcache là chủ sở hữu cho chế độ xem trong bộ điều hợp. Tôi có đúng không? – Nitish

4

Dưới đây là cách bạn có thể lấy ListView của mình trong Hoạt động và duyệt qua nó.

ListView myList = getListView(); 
int count = myList.getCount(); 
for (int i = 0; i < count; i++) 
{ 
    ViewGroup row = (ViewGroup) myList.getChildAt(i); 
    TextView tvTest = (TextView) row.findviewbyid(R.id.tvTestID); 
    // Get your controls from this ViewGroup and perform your task on them =) 

} 

Tôi hy vọng điều này sẽ giúp

+0

bạn có thể giải thích cho tôi, sự khác biệt để có được danh sách trẻ em từ View hoặc ViewGroup? – ADIT

+5

Cho ngoại lệ nullpointer, – ADIT

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