【问题标题】:Increment the value of text in expandable listview增加可展开列表视图中文本的值
【发布时间】:2016-07-04 08:27:20
【问题描述】:

我已经创建了自定义 Expandablelistview。该列表视图包含加号和减号图像视图以及子项中的一个文本视图。如果我单击一行中的加号意味着它将增加值增加为 1。但是如果我继续下一行值从 2 开始增加。我想为每个子项从 0 增加值。

 public class ExpandListAdapter extends BaseExpandableListAdapter {

    private Context context;
    private ArrayList<Group> groups;
    ArrayList<Child> ch_list=new ArrayList<Child>();
    private ViewHolder viewHolder; // make it global
    private int count=0;
    int[] myIntegerArray = new int[10100];

    public class ViewHolder {

        TextView tv ;
        ImageView food_image;
        ImageView minus,plus ;
        TextView item_count;

    }


    public ExpandListAdapter(Context context, ArrayList<Group> groups) {
        this.context = context;
        this.groups = groups;

    }


    @Override
    public Object getChild(int groupPosition, int childPosition) {
        ArrayList<Child> chList = groups.get(groupPosition).getItems();
        return chList.get(childPosition);
    }

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

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

        final Child child = (Child) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater inflator = LayoutInflater.from(parent.getContext());
            convertView = inflator.inflate(R.layout.detail_list, null);
            viewHolder = new ViewHolder();

            viewHolder.tv = (TextView) convertView.findViewById(R.id.type);
            viewHolder.food_image = (ImageView) convertView.findViewById(R.id.food_image);
            viewHolder.minus = (ImageView) convertView.findViewById(R.id.minus);
            viewHolder.plus = (ImageView) convertView.findViewById(R.id.plus);
            viewHolder.item_count = (TextView) convertView.findViewById(R.id.count);


            convertView.setTag(viewHolder);
        }
        else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.tv.setText(child.getChildName());
        viewHolder.item_count.setText(child.getCount());
        viewHolder.plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Child modelChild = groups.get(groupPosition).getItems().get(childPosition);
                count = count + 1;
                modelChild.setCount(count);
                modelChild.setChildName(modelChild.getChildName());
                // set your other items if any like above
                groups.get(groupPosition).getItems().set(childPosition, child);
                notifyDataSetChanged();
            }
        });
        viewHolder.minus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(count!=0) {
                    Child modelChild = groups.get(groupPosition).getItems().get(childPosition);
                    count = count - 1;
                    modelChild.setCount(count);
                    modelChild.setChildName(modelChild.getChildName());
                    // set your other items if any like above
                    groups.get(groupPosition).getItems().set(childPosition, child);
                    notifyDataSetChanged();
                }
            }
        });

        return convertView;
    }

    @Override
    public  int getChildrenCount(int groupPosition) {
        ArrayList<Child> chList = groups.get(groupPosition).getItems();
        return chList.size();
    }

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

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
        Group group = (Group) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater inf = (LayoutInflater) context
                    .getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = inf.inflate(R.layout.group_item, null);
        }
        TextView tv = (TextView) convertView.findViewById(R.id.group_name);
        tv.setText(group.getName());
        ExpandableListView eLV = (ExpandableListView) parent;
        int count = getGroupCount();
        if(count<1){

            eLV.expandGroup(groupPosition);
            // eLV.setGroupIndicator(null);
        }


        return convertView;
    }



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

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

}

儿童模型:

public class Child {

    private String Name;
    private int Image,count;

    public String getName() {
        return Name;
    }

    public void setName(String Name) {
        this.Name = Name;
    }

    public int getImage() {
        return Image;
    }

    public void setImage(int Image) {
        this.Image = Image;
    }

    public void setcount(int count) {
        this.count = count;
    }

    public int getcount() {
        return count;
    }
}

组模型:

    public class Group {

    private String name;
    private ArrayList<Child> Items;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ArrayList<Child> getItems() {
        return Items;
    }

    public void setItems(ArrayList<Child> Items) {
        this.Items = Items;
    }



}

Logcat 错误:

FATAL EXCEPTION: main
                                                                     Process: abservetech.com.foodapp, PID: 14471
                                                                     android.content.res.Resources$NotFoundException: Unable to find resource ID #0x0
                                                                         at android.content.res.Resources.getResourcePackageName(Resources.java:1871)
                                                                         at android.content.res.SPRDResources.getThemeResources(SPRDResources.java:94)
                                                                         at android.content.res.SPRDResources.getText(SPRDResources.java:155)
                                                                         at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52)
                                                                         at android.widget.TextView.setText(TextView.java:3927)
                                                                         at abservetech.com.foodapp.ExpandListAdapter.getChildView(ExpandListAdapter.java:83)
                                                                         at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:451)
                                                                         at android.widget.AbsListView.obtainView(AbsListView.java:2280)
                                                                         at android.widget.ListView.measureHeightOfChildren(ListView.java:1271)
                                                                         at android.widget.ListView.onMeasure(ListView.java:1183)
                                                                         at android.view.View.measure(View.java:16512)

【问题讨论】:

  • 它没有正确增加的问题是什么?
  • 最初所有子项的计数值为0。如果我点击第一行的加号,计数值从0增加到1。之后,我点击第二行表示计数值增加从 1 到 2。我想将计数值增加到 0 到 1,而不是 1 到第 2 行中的 2
  • 您可以通过 POJO 类值而不是您现在使用的静态计数来完成
  • 你能解释清楚吗
  • 就像在 Group 模型类中取一个 int 变量,并为每个位置增加 1

标签: android expandablelistview expandablelistadapter


【解决方案1】:
private ViewHolder viewHolder; // make it global

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

    Child child = (Child) getChild(groupPosition, childPosition);

    if (convertView == null) {
        LayoutInflater inflator = LayoutInflater.from(parent.getContext());
        convertView = inflator.inflate(R.layout.detail_list, null);
        viewHolder = new ViewHolder();

        viewHolder.tv = (TextView) convertView.findViewById(R.id.type);
        viewHolder.food_image = (ImageView) convertView.findViewById(R.id.food_image);
        viewHolder.minus = (ImageView) convertView.findViewById(R.id.minus);
        viewHolder.plus = (ImageView) convertView.findViewById(R.id.plus);
        viewHolder.item_count = (TextView) convertView.findViewById(R.id.count);


        convertView.setTag(viewHolder);
    }
    else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.childName.setText(child.getChildName());
    viewHolder.item_count.setText(child.getCount());
    viewHolder.ivPlus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                Child modelChild = groups.get(groupPosition).getChildrens().get(childPosition);

                if(modelChild.getCount()>=0)  // set your count default 0 when you bind data initially 
                int count = modelChild.getCount() + 1;

                modelChild.setCount(count);
                modelChild.setChildName(modelChild.getChildName());
                // set your other items if any like above
                groups.get(groupPosition).getChildrens().set(childPosition, child);
                notifyDataSetChanged();
        }
    });
    viewHolder.ivMinus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(count!=0) {
                Child modelChild = groups.get(groupPosition).getChildrens().get(childPosition);

                if(modelChild.getCount()>0)  // set your count default 0 when you bind data initially 
                int count = modelChild.getCount() - 1;

                modelChild.setCount(count);
                modelChild.setChildName(modelChild.getChildName());
                // set your other items if any like above
                groups.get(groupPosition).getChildrens().set(childPosition, child);
                notifyDataSetChanged();
            }
        }
    });

    return convertView;
}

【讨论】:

  • 你能解释一下“Child modelChild = groups.get(groupPosition).getChildrens().get(childPosition);”这一行吗
  • @Abserve Tech 它会获取您点击的特定位置的子项目,它是否有效?
  • 不,它出现错误进程:abservetech.com.foodapp,PID:24040android.content.res.Resources$NotFoundException:无法在 android.content.res.Resources.getResourcePackageName 找到资源 ID #0x0(资源.java:1871)
  • 如果我使用你的代码,因为它意味着 getChildren() 地方显示的错误
  • @AbserveTech 建议采取什么措施?
猜你喜欢
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
  • 2016-02-06
  • 1970-01-01
  • 2017-03-28
  • 2011-10-15
相关资源
最近更新 更多