如何在ArrayAdapter中有条件地隐藏Listview的最后一行?

时间:2015-04-14 16:10:21

标签: android listview android-fragments

我有两个fragments,其中包含列表(ListView)。在第二个fragment中,每一行(尽管是最后一行)包含checkbox。最后一行包含不同的layouttext + button) - 这是因为我希望在列表结束后显示(不在屏幕底部)。我想要实现的是:当没有选中checkbox时,最后一行是可见的,否则最后一行是不可见的。但我还没有找到一个好的解决方案..我使用getChild()但这仅指可见项目。你有什么主意吗?谢谢!

以下是getView中的ArrayAdapter方法:

public View getView(final int position, View convertView, final ViewGroup parent) {

    ViewHolder holder = null;
    final int last = this.getCount()-1;
    int theType = getItemViewType(position);

    if (convertView == null) {
        if (theType == 0) {
            convertView = inflater.inflate(layoutResourceId, null);

            holder = new ViewHolder();
            holder.name = (TextView) convertView
                    .findViewById(R.id.name);
            final CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.checkedDealer);
            checkBox.setTag(position);
            checkBox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(checkBox.isChecked()){
                        checked++;

                        if(checked==1){
                            parent.getChildAt(last).setVisibility(View.GONE);
                            notifyDataSetChanged();
                        }
                    }
                    else{
                        checked--;

                        if(checked==0){
                            parent.getChildAt(last).setVisibility(View.VISIBLE);
                        }
                    }
                }
            });
            convertView.setTag(holder);
        } else {
            convertView = inflater.inflate(R.layout.list_search_dealer_footer, null);
        }
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    if (theType == 0) {
        // object item based on the position
        Dealer dealer = data.get(position);
        holder.name.setText(dealer.getName());
    }

    return convertView;
}

1 个答案:

答案 0 :(得分:0)

您将项目信息存储在一个数组中,对吧?因此,做一个你想要的方法是有一个布尔字段作为标志。每次选中或取消选中复选框时,您将遍历数组并检查是否有任何选中的值,如果有 - 将标志设置为true,否则设置为false。当您必须给最后一行充气时,您将知道是否需要给它充气或返回。