Oldukça garip bir sorun yaşıyorum. Benim mantığım basit, benim uygulama ana uygulama navigasyon için bir NavigationDrawer
kullanır ve mevcut seçeneklerin karmaşıklığı nedeniyle, bazı navigasyon öğeleri için bir ExpandableListViev
kullanmak istiyorum.GenişletilebilirListView ve NavigationDrawer
Sorun? Basit: Çekmecenin üzerindeki yüklerin listesi; Ancak, çocukları göstermek için genişlemezler.
Soru Genişlemesinin bir nedeni var mı? Bunun için farklı bir UI widget'ı kullanmalı mıyım? Bazı Notlar
: Farklı Etkinliğini aynı kodu eklenmiş, ancak bunun yerine çekmecenin üzerinde ExpandableListViev
barındırma, ben sadece unsur olarak basit LinearLayout
eklendi vardı ve orada iyi çalışır . Faaliyet için
Benim Düzen:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ExpandableListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/secondary_color_holo"/>
</android.support.v4.widget.DrawerLayout>
Etkinlik kodu:
private DrawerLayout mDrawerLayout;
private ExpandableListView mDrawerList;
private ExpandableDrawerAdapter mDrawerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ExpandableListView) findViewById(R.id.left_drawer);
// set up the drawer's list view with items and click listener
mDrawerAdapter = new ExpandableDrawerAdapter(this);
mDrawerList.setAdapter(mDrawerAdapter);
mDrawerList.setOnGroupClickListener(new DrawerGroupClickListener());
mDrawerList.setOnChildClickListener(new DrawerChildClickListener());
}
Ve nihayet çok basit adaptör:
public class ExpandableDrawerAdapter extends BaseExpandableListAdapter {
private static final int CAMPAIGNS = 0;
private static final int CONVERSIONS = 1;
private static final int MYACCOUNT = 2;
private LayoutInflater mInflater;
private String[] mainNavItems, campaignNavItems, myAccountNavItems;
public ExpandableDrawerAdapter (Activity context) {
this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.mainNavItems = context.getResources().getStringArray(R.array.main_nav_items);
this.campaignNavItems = context.getResources().getStringArray(R.array.campaigns_nav_items);
this.myAccountNavItems = context.getResources().getStringArray(R.array.my_account_nav_items);
}
public Object getChild(int groupPosition, int childPosition) {
switch (groupPosition) {
case CAMPAIGNS:
return campaignNavItems[childPosition];
case MYACCOUNT:
return myAccountNavItems[childPosition];
default:
return "";
}
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.drawer_child_list_item, null);
}
TextView childText = (TextView) convertView.findViewById(R.id.drawer_child_list_item_text);
childText.setText((String) getChild(groupPosition, childPosition));
return convertView;
}
public int getChildrenCount(int groupPosition) {
switch (groupPosition) {
case CAMPAIGNS:
Constants.logMessage("Children for group position: " + groupPosition + " are: " + campaignNavItems.length);
return campaignNavItems.length;
case CONVERSIONS:
Constants.logMessage("Children for group position: " + groupPosition + " are: " + 0);
return 0;
case MYACCOUNT:
Constants.logMessage("Children for group position: " + groupPosition + " are: " + myAccountNavItems.length);
return myAccountNavItems.length;
default:
return 0;
}
}
public Object getGroup(int groupPosition) {
return mainNavItems[groupPosition];
}
public int getGroupCount() {
return mainNavItems.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.drawer_list_item,
null);
}
TextView groupText = (TextView) convertView.findViewById(R.id.drawer_list_item_text);
groupText.setText((String) getGroup(groupPosition));
return convertView;
}
public boolean hasStableIds() {
return true;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
Çocuklar için bu dizilerde değerleriniz varsa (ki sanırım sizde var :)). "ExpandableListView" öğesinde bir "OnGroupClickListener" ayarladığınızı görüyorum. Umarım bu dinleyicinin onGroupClick() 'geri çağrısından 'false' döndürürsünüz demektir. Aksi takdirde, bir dönüş değeriyle birlikte daraltma/genişletme etkinliğini engellersiniz. 'true' (yani, etkinliği zaten ele aldığınız için başka hiçbir işlem gerekli değildir). – Luksprog
Hmm, belgeler, gerçekleri geri döndürmenin varsayılan daraltmayı ve genişletmeyi engelleyeceği konusunda çok açık hale getirmez. Çekmecenin dışına aynı mantığa sahip olduğum için garipti ve iyi çalıştı. O zamanlar evde yokum, ama her iki dinleyiciye doğru geri döndüğümden emin olmak istediğim sorun benim için doğru çözüm gibi geliyor. İsterseniz devam edin ve cevap olarak gönderin, eve döndüğümde ve yanlış döndüğümde cevabınızı kabul edebilirim. –
Her bir öğe genişler/sözleşme yapar mı? Ya da genişleyen ve basit tıklanabilir öğeler olan diğerleri var mı? – AlleyOOP