我创建了一个自定义的可扩展列表视图和一个自定义适配器。列表视图包含3个XML布局(请忽略表格布局的哑术使用!):
定义ExpandableListView
的人<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ExpandableListView
android:id="@+id/expandable_list"
android:groupIndicator="@null"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000" >
<!-- android:listSelector="@android:color/transparent" -->
</ExpandableListView>
</LinearLayout>
定义父(组)的另一个:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"
android:paddingTop="0dip"
android:layout_gravity="center_vertical"
android:gravity="center_vertical">
<TableRow android:layout_gravity="center_vertical">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"/>
<TableLayout
android:layout_width="wrap_content"
android:layout_height="100dip"
android:stretchColumns="1"
android:paddingTop="0dip"
android:layout_gravity="center_vertical"
android:gravity="center_vertical">
<TableRow android:layout_gravity="center_vertical">
<TextView
android:id="@+id/list_item_text_view"
android:textColor="@color/tab_sel"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_gravity="left|center_vertical"
android:gravity="center_vertical"
android:fillViewport="true"
android:textSize="17sp"
android:layout_marginLeft="10dip"
android:textStyle="bold"/>
</TableRow>
</TableLayout>
<ImageView
android:layout_width="25dip"
android:id="@+id/rightcheck"
android:layout_height="25dip"
android:layout_gravity="left|center_vertical"
android:scaleType="centerCrop"
android:background="@drawable/sectionuncheck"
android:layout_marginRight="8sp"
android:layout_marginTop="0dip"/>
</TableRow>
</TableLayout>
最后一个定义了孩子:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"
android:paddingTop="0dip"
android:layout_gravity="top">
<!-- android:background="@drawable/bar_bg" -->
<TableRow>
<ImageView
android:id="@+id/image"
android:layout_width="30dip"
android:layout_height="30dip"
android:layout_marginLeft="20dip"
android:src="@drawable/arrow"
android:layout_gravity="center_vertical"
android:scaleType="centerCrop"/>
<TableLayout
android:layout_width="wrap_content"
android:layout_height="65dp"
android:stretchColumns="1"
android:paddingTop="0dip"
android:layout_gravity="top"
android:gravity="center_vertical" >
<TableRow>
<TextView
android:id="@+id/list_item_text_child"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_gravity="left|center_vertical"
android:textSize="15sp"
android:layout_marginLeft="20dip"
android:layout_marginRight="35dip"
android:text=""
android:textColor="#003479"/>
</TableRow>
<TableRow >
<TextView
android:id="@+id/text"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_gravity="left|center_vertical"
android:textSize="15sp"
android:layout_marginLeft="20dip"
android:layout_marginRight="35dip"
android:text=""
android:textColor="#44B5E7"/>
</TableRow>
</TableLayout>
<ImageView
android:id="@+id/ivProdCheck"
android:layout_width="25dip"
android:layout_height="25dip"
android:layout_gravity="left|center_vertical"
android:scaleType="centerCrop"
android:layout_marginRight="8dp"
android:background="@drawable/check"
android:visibility="gone"/>
</TableRow>
</TableLayout>
每次点击一个孩子时,都会被选中或取消选中,这意味着ivProdCheck是否可见
if(is_preffered == 0)
{
Glob.getPreferred().add(prod_curent);
image.setVisibility(View.VISIBLE);
}
else
{
image.setVisibility(View.GONE);
}
在适配器中发生同样的事情,在活动开始时显示已选中/取消选中的项目:
@Override
//in this method you must set the text to see the children on the list
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup)
{
/*........*/
if(Glob.getPreferred() != null)
{
for (Product to_compare : Glob.getPreferred())
{
if(to_compare.id_produs == id_produs_curent)
{
image.setVisibility(View.VISIBLE);
break;
}
}
}
view.setTag(holder);
//return the entire view
return view;
}
当我点击群组/家长时,我选择/取消选择所有孩子并根据该更改图像
if(counter != prod_in_cat)
{
for(Product p : cat_curent.getProd())
{
Glob.getPreferred().add(p);
}
imageParent.setImageResource(R.drawable.sectioncheck);
}
else
{
imageParent.setImageResource(R.drawable.sectionuncheck);
}
每次选择一个组(意味着选择所有孩子)时,如果我取消选择一个孩子,我还想更改父图像。此外,如果我手动选择/取消选择一个组中的所有子项,我也想更改组图像。同样适用于onCreate()
。
我在点击子项时尝试了这个(日志显示它应该是什么,所以没有错误):
if(counter != cat_curent.getProduse().size())
{
// Log.e("!= -> ","counter " + counter);
// Log.e("!= -> ","cat_curent" + cat_curent.getProduse().size());
imageParent.setImageResource(R.drawable.sectioncheck);
}
else
{
// Log.e("!= -> ","counter " + counter);
// Log.e("!= -> ","cat_curent" + cat_curent.getProduse().size());
imageParent.setImageResource(R.drawable.sectionuncheck);
}
和onCreate()
if((prod_pref > 0) && (prod_pref < prod_cat_glob))
{
Log.e("Log 4", "Categoria " + i + " Produse " + prod_pref);
imageParent.setImageResource(R.drawable.sectionuncheck); //NullPointerException here
}
else if(prod_pref == prod_cat_glob)
{
imageParent.setImageResource(R.drawable.sectioncheck); //NullPointerException here
}
每当我使用NullPointerException
setImageResource()
这里有什么问题?
答案 0 :(得分:0)
没关系,我开始工作了。单击父级或子级时,列表视图的数据源始终更新。问题是列表没有刷新。几天前我有类似修复的东西,尝试.notifyDataSetChanged()没有用,所以我没有用它。然而事实证明,这是有效的。非常感谢@ m0skit0。然而,仍然不确定,为什么NPE。我会试着搞清楚。