2010-04-16 16 views
5

öğesine dokunduğunuzda odağa ulaşamıyor Tamam, bu yüzden bir ExpandableListView ve alt sınıflandırılmış bir BaseExpandableListAdapter yazdım ... Çocuğun tıklatıldığında odağı almasını sağlayamadığı sürece her şey iyi çalışıyor. İztopunu kullanırsam her şey yolunda gider. Ama bir çocuğa tıklamaya çalışırsam hiçbir şekilde geri bildirim alamıyorum.GenişletilebilirListView alt öğeleri,

Android'i ayarlamayı denedim: focusable, android: focusableInTouchMode ve android: tıklanabilir (ve bunu kod aracılığıyla da denedim) ancak çalışacak hiçbir şey alamıyorum. Herhangi bir fikir? peşin

public class ExpandableAppAdapter extends BaseExpandableListAdapter 
{ 
    private PackageManager m_pkgMgr; 
    private Context m_context; 
    private List<ApplicationInfo> m_groups; 
    private List<List<ComponentName>> m_children; 

    public ExpandableAppAdapter(Context context, List<ApplicationInfo> groups, List<List<ComponentName>> children) 
    { 
     m_context = context; 
     m_pkgMgr = m_context.getPackageManager(); 
     m_groups = groups; 
     m_children = children; 
    } 

    @Override 
    public Object getChild(int groupPos, int childPos) 
    { 
     return m_children.get(groupPos).get(childPos); 
    } 

    @Override 
    public long getChildId(int groupPos, int childPos) 
    { 
     return childPos; 
    } 

    @Override 
    public int getChildrenCount(int groupPos) 
    { 
     return m_children.get(groupPos).size(); 
    } 

    @Override 
    public View getChildView(int groupPos, int childPos, boolean isLastChild, View convertView, ViewGroup parent) 
    { 
     if (convertView == null) 
     { 
      LayoutInflater inflater = LayoutInflater.from(m_context); 
      convertView = inflater.inflate(R.layout.expandable_app_child_row, null); 
     } 

     ComponentName child = (ComponentName)getChild(groupPos, childPos); 
     TextView txtView = (TextView)convertView.findViewById(R.id.item_app_pkg_name_id); 
     if (txtView != null) 
      txtView.setText(child.getPackageName()); 

     txtView = (TextView)convertView.findViewById(R.id.item_app_class_name_id); 
     if (txtView != null) 
      txtView.setText(child.getClassName()); 

     convertView.setFocusableInTouchMode(true); 
     return convertView; 
    } 

    @Override 
    public Object getGroup(int groupPos) 
    { 
     return m_groups.get(groupPos); 
    } 

    @Override 
    public int getGroupCount() 
    { 
     return m_groups.size(); 
    } 

    @Override 
    public long getGroupId(int groupPos) 
    { 
     return groupPos; 
    } 

    @Override 
    public View getGroupView(int groupPos, boolean isExpanded, View convertView, ViewGroup parent) 
    { 
     if (convertView == null) 
     { 
      LayoutInflater inflater = LayoutInflater.from(m_context); 
      convertView = inflater.inflate(R.layout.expandable_app_group_row, null); 
     } 

     ApplicationInfo group = (ApplicationInfo)getGroup(groupPos); 
     ImageView imgView = (ImageView)convertView.findViewById(R.id.item_selection_icon_id); 
     if (imgView != null) 
     { 
      Drawable img = m_pkgMgr.getApplicationIcon(group); 
      imgView.setImageDrawable(img); 
      imgView.setMaxWidth(20); 
      imgView.setMaxHeight(20); 
     } 

     TextView txtView = (TextView)convertView.findViewById(R.id.item_app_name_id); 
     if (txtView != null) 
      txtView.setText(m_pkgMgr.getApplicationLabel(group)); 

     return convertView; 
    } 
    @Override 
    public boolean hasStableIds() 
    { 
     return false; 
    } 
    @Override 
    public boolean isChildSelectable(int groupPos, int childPos) 
    { 
     return true; 
    } 
} 

Teşekkür:

İşte benim Adaptör kodudur!

+0

Odak noktasını bir ExpandedListView programında yönetmeye çalışırken benzer sorunlar yaşıyorum. 'Wrap_content' düzeltme işleminiz neden beni kızdırıyor? – Mark

+0

Teknik olarak bu bir yorum olarak eklenmiş olmalı ve cevap olarak değil ... – Justin

+0

Neden çalıştığından emin değilim ama benim için çalışıyor – Justin

cevap

3

Tamam, sonunda anladım!

Aslında benim bağdaştırıcım yerine XML dosyamda yapmak zorunda kaldım (bağdaştırıcıyı görüntülendiğinde, setFocusableInTouchMode alt görünümü oluşturulduğunda gösterdim). Bunu sadece herşey yolunda çalışmaya başladı wrap_content değiştirildi kısa sürede

android:layout_height="?android:attr/listPreferredItemHeight" 

:

ben kullanıyordum öğretici (ki o bir hatırlayamıyorum) Bana çocuk yüksekliğini ayarlamak vardı.

İlgili konular