我正在使用来自数据库的数据创建一个ExpandableListView。为此,我使用了CursorTreeAdapter,并使用包含我从数据库检索到的数据的Cursor对象填充它。
我以为默认情况下Android会将没有子项的组视为“不可扩展”。
然而,它仍然在行上显示扩展图标,当我点击它时,它什么也不做。我不希望它显示这个图标。
我只想让有子项的组显示扩展图标,但这并没有发生。它对于所有行(有子项和没有子项的行)都显示扩展图标。
更新
我研究了我的代码,发现问题基本上是在设置组的groupIndicator上。不过,我尝试了很多方法,比如创建一个选择器并根据状态和可展开性设置其可绘制对象,就像这样:
我以为默认情况下Android会将没有子项的组视为“不可扩展”。
然而,它仍然在行上显示扩展图标,当我点击它时,它什么也不做。我不希望它显示这个图标。
我只想让有子项的组显示扩展图标,但这并没有发生。它对于所有行(有子项和没有子项的行)都显示扩展图标。
更新
我研究了我的代码,发现问题基本上是在设置组的groupIndicator上。不过,我尝试了很多方法,比如创建一个选择器并根据状态和可展开性设置其可绘制对象,就像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_empty="true"
android:state_expanded="false"
android:drawable="@android:color/transparent"/>
<item android:drawable="@drawable/expander_ic_maximized" />
</selector>
然而当折叠组时,它会对所有组进行隐藏,包括那些具有子项的组(因为Android将折叠的组视为空)。
是否有更好的方法仅针对具有子项的组设置指示器?
这是我的代码。
public class ContactsExpandableListAdapter extends CursorTreeAdapter
{
TextView mContactNameTextView, mContactNumberTextView;
Cursor mChildrenCursor = null;
public ContactsExpandableListAdapter(Cursor cursor, Context context)
{
super(cursor, context);
}
@Override
protected Cursor getChildrenCursor(Cursor cursor)
{
if(mContactId == -1)
mContactId = null;
return mController.getContactById(mContactId);
}
public int getChildrenCount(int groupPosition)
{
return mChildrenCursor.getCount();
}
@Override
protected View newGroupView(Context context, Cursor cursor, boolean paramBoolean, ViewGroup viewGroup)
{
View view = LayoutInflater.from(context).inflate(R.layout.filterbycontact, viewGroup, false);
mContactNameTextView = (TextView) view.findViewById(R.id.contact_name);
if(cursor.getString(cursor.getColumnIndex("contact_name")) == null) mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
else
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_name")));
view.setTag(cursor.getString(cursor.getColumnIndex("contact_id")));
return view;
}
@Override
protected View newChildView(Context context, Cursor cursor, boolean paramBoolean, ViewGroup viewGroup)
{
View view = LayoutInflater.from(context).inflate(R.layout.filterbycontact, viewGroup, false);
if(cursor.getString(cursor.getColumnIndex("contact_name")) == null)
{
mContactNameTextView = (TextView) view.findViewById(R.id.contact_name);
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
}
else
{
mContactNumberTextView = (TextView) view.findViewById(R.id.contact_number);
mContactNumberTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
}
view.setTag(cursor.getString(cursor.getColumnIndex("contact_number")));
return view;
}
@Override
protected void bindGroupView(View view, Context paramContext, Cursor cursor, boolean paramBoolean)
{
mContactNameTextView = (TextView) view.findViewById(R.id.contact_name);
if(cursor.getString(cursor.getColumnIndex("contact_name")) == null)
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
else
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_name")));
view.setTag(cursor.getString(cursor.getColumnIndex("contact_id")));
}
@Override
protected void bindChildView(View view, Context context, Cursor cursor, boolean paramBoolean)
{
if(cursor.getString(cursor.getColumnIndex("contact_name")) == null)
{
mContactNameTextView = (TextView) view.findViewById(R.id.contact_name);
mContactNameTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
}
else
{
mContactNumberTextView = (TextView) view.findViewById(R.id.contact_number);
mContactNumberTextView.setText(cursor.getString(cursor.getColumnIndex("contact_number")));
}
}
}
newGroupView()
方法中实现,对吧?顺便问一下,什么是viewHolder和indicator? - rogcg