ExpandableListView getChildAt()返回null [英] ExpandableListView getChildAt() return null

查看:70
本文介绍了ExpandableListView getChildAt()返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将图像添加到ExpandableList的某些单元格中我已经在寻找问题的答案,然后尝试放入

I want to add an image into some cells in ExpandableListI already search for answer on my question and I try to put

expListView.getLastVisiblePosition();
expListView.getFirstVisiblePosition();

这是行不通的.我无法在适配器的getView()中执行此操作,因为我是通过从数据库下载数据来动态创建单元格的,然后可以说出哪个单元格需要图像.

And it isn't work. I can't do this in getView() in adapter, because I create cells dynamically by downloading data from database, and after it I can say which cell need image.

我也尝试这样做: 有时listView.getChildAt(int index)返回NULL(Android) getChildAt上的Nullpointerexception GridView getChildAt()返回null 没有解决方案. 这是我的代码:

I also tried to do: Sometimes listView.getChildAt(int index) returns NULL (Android) Nullpointerexception on getChildAt GridView getChildAt() returns null No solution work. It is my code:

public class ExpandableListAdapter extends BaseExpandableListAdapter {
    private Context _context;
    private List<String> _listDataHeader; // header titles
    // child data in format of header title, child title
    private HashMap<String,String> _listDataChild;

    public ExpandableListAdapter(Context context, List<String> listDataHeader,
                                 HashMap<String, String> listChildData) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
    }

    @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition));
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item, null);
        }

        TextView txtListChild = (TextView) convertView
                .findViewById(R.id.lblListItem);

        txtListChild.setText(childText);
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return 1;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return this._listDataHeader.get(groupPosition);
    }

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
        String headerTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.spinner, null);
        }

        TextView lblListHeader = (TextView) convertView
                .findViewById(R.id.lblListHeader);
        lblListHeader.setTypeface(Controller.getInstance().getTypeface());
        lblListHeader.setText(headerTitle);

        //I can' do this in this place
        //ImageView iv = (ImageView)convertView.findViewById(R.id.exc);
        //iv.setImageResource(R.drawable.excl);

        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}

活动:

public class ExpertZone extends Activity{
    String err;
    Context context;
    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    HashMap<String, String> listDataChild;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.expert_zone);

        context=this;

        // get the listview
        expListView = (ExpandableListView) findViewById(R.id.expListView);

        // preparing list data
        prepareListData();

    }

    /*
     * Preparing the list data
     */
    private void prepareListData() {
        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, String>();

        DBexpertTask dbTask = new DBexpertTask(getString(R.string.expertServlet)) {
            @Override
            protected void onPostExecute(JSONObject obj) {
                JSONArray jArray = new JSONArray();
                try {
                    JSONArray jsonObject = obj.getJSONArray(getString(R.string.data));
                    for (int i = 0; i < jsonObject.length(); i++) {
                        JSONObject object = jsonObject.getJSONObject(i);
                        err = object.getString(getString(R.string.err));
                        if(err.equals(getString(R.string.no))) {
                            jArray = object.getJSONArray(getString(R.string.data));
                            for (int j = 0; j < jArray.length(); j++) {
                                JSONObject values = jArray.getJSONObject(j);
                                listDataHeader.add(String.valueOf(values.get(getString(R.string.who)).toString()));
                                listDataChild.put(String.valueOf(values.get(getString(R.string.who)).toString()), String.valueOf(values.get(getString(R.string.what)).toString()));
                            }
                        }

                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
                listAdapter = new ExpandableListAdapter(context, listDataHeader, listDataChild);

                // setting list adapter
                expListView.setAdapter(listAdapter);

               for(int j=0; j<expListView.getCount(); j++){
                    expListView.getLastVisiblePosition();
                    expListView.getFirstVisiblePosition();
                    View v = expListView.getChildAt(j).findViewById(R.id.expListView);
                    ImageView iv = (ImageView) v.findViewById(R.id.exc);
                    iv.setImageResource(R.drawable.excl);
                }

            }
        };
        dbTask.execute();
    }
}

我的xml-单元格布局

my xml - cell layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="6">

    <TextView
        android:id="@+id/lblListHeader"
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:gravity="center_vertical|center_horizontal"
        android:layout_weight="5"
        android:layout_width="0dp"
        android:layout_height="60dp"
        android:textSize="18dp"  />
    <ImageView
        android:id="@+id/exc"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center_vertical|center_horizontal"
        android:layout_gravity="center_vertical" />
</LinearLayout>

和expert_zone.xml

and expert_zone.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_alignParentBottom="true"
    >

    <ExpandableListView
        android:id="@+id/expListView"
        android:layout_height="match_parent"
        android:layout_width="match_parent"/>
</LinearLayout>

如何在此适配器中动态更改图像图标? 建议得到高度赞赏.

How can I dynamically change image icon in this adapter? Suggestions are highly appreciated.

推荐答案

如果该子项当前不可见,则该视图可能为空,因为该子视图已被回收,如果需要访问数据,则应该获取适配器,然后获取该对象从中.请检查以下答案:

If the child is currently not visible the view might be null since it was recycled, if you need to access data you should get the Adapter instead and fetch the object from it. Please check this answer:

Android:从ListView访问子视图

这篇关于ExpandableListView getChildAt()返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆