更改可扩展的列表视图组图像onCreate和child

时间:2014-02-03 10:13:44

标签: android listview nullpointerexception imageview

我创建了一个自定义的可扩展列表视图和一个自定义适配器。列表视图包含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()

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

没关系,我开始工作了。单击父级或子级时,列表视图的数据源始终更新。问题是列表没有刷新。几天前我有类似修复的东西,尝试.notifyDataSetChanged()没有用,所以我没有用它。然而事实证明,这是有效的。非常感谢@ m0skit0。然而,仍然不确定,为什么NPE。我会试着搞清楚。