单击按钮后,Android在自定义列表视图中隐藏和显示复选框 [英] Android hide and show checkboxes in custom list view on button click

查看:164
本文介绍了单击按钮后,Android在自定义列表视图中隐藏和显示复选框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用下面提供的适配器.我在图中解释.数字仅供参考. 我使用textview和复选框中的单行.应当先显示textviews并首先隐藏复选框.按下按钮后应该出现checkbox且textview保持不变.请帮助我.谢谢.

 public class Adapter extends ArrayAdapter<SectionsModel>{

    private ArrayList<SectionsModel> list;
    public Adapter(Context context, int resource, ArrayList<SectionsModel> objects) {
        super(context, resource, objects);
        this.list = new ArrayList<SectionsModel>();
        this.list.addAll(objects);
    }

    ViewHolder v = new ViewHolder();
    public void setcheckbox() {

        Log.d("viewholser" + v, "checkbox" + v.selected);

        v.selected.setVisibility(View.VISIBLE);

    }

    public class ViewHolder {
        public TextView setting;
        public CheckBox selected;
    }

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


        ViewHolder holder = null;
        if (convertView == null) {

            LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = vi.inflate(R.layout.menu_frame_child, null);
            holder = new ViewHolder();

            holder.setting = (TextView) convertView.findViewById(R.id.child_setting_header);
            holder.selected = (CheckBox) convertView.findViewById(R.id.settings_check);

        //  holder.selected.setVisibility(View.INVISIBLE);

            convertView.setTag(holder);

            //holder.selected.setVisibility(View.INVISIBLE);

            holder.selected.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CheckBox cb = (CheckBox) v;
                    SectionsModel _state = (SectionsModel) cb.getTag();
                    _state.setSelected(cb.isChecked());
                }
            });
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        SectionsModel section = list.get(position);

        holder.setting.setText(section.getSection());
        holder.selected.setChecked(section.isSelected());

        holder.selected.setTag(section);

        return convertView;
    }

    @Override
    public int getCount() 
    {
        return super.getCount();
    }

    @Override
    public int getPosition(SectionsModel item) {

        return super.getPosition(item);
    }


}

更新: 在getview中,我只添加以下代码 AppConstants.ischeckboxvisible是变量,其中Appconstants是类,而ischeckboxvisible是该类上的公共静态变量.最初,此变量为false

            if (!AppConstants.ischeckboxvisible)
            {
       holder.selected.setVisibility(View.INVISIBLE);
    }
        if (AppConstants.ischeckboxvisible)
            {
           holder.selected.setVisibility(View.VISIBLE);
        }

解决方案

将另一个属性作为inEditMode添加到您的SectionModel中,并在用户单击edit时在数组中的所有项目上将其设置为true,然后在适配器上调用notifyDataSetChanged. /p>

在适配器"中检查每个项目上的标记,并使它们可见或不可见.

i use the adapter which is given below. i explain in the figures. figures is just for referances. i use textview and checkbox in for single line. textviews should appear and checkboxes hide initially.after on button press checkbox should appear and textview remain same.please help me.thanks in advance..

 public class Adapter extends ArrayAdapter<SectionsModel>{

    private ArrayList<SectionsModel> list;
    public Adapter(Context context, int resource, ArrayList<SectionsModel> objects) {
        super(context, resource, objects);
        this.list = new ArrayList<SectionsModel>();
        this.list.addAll(objects);
    }

    ViewHolder v = new ViewHolder();
    public void setcheckbox() {

        Log.d("viewholser" + v, "checkbox" + v.selected);

        v.selected.setVisibility(View.VISIBLE);

    }

    public class ViewHolder {
        public TextView setting;
        public CheckBox selected;
    }

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


        ViewHolder holder = null;
        if (convertView == null) {

            LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = vi.inflate(R.layout.menu_frame_child, null);
            holder = new ViewHolder();

            holder.setting = (TextView) convertView.findViewById(R.id.child_setting_header);
            holder.selected = (CheckBox) convertView.findViewById(R.id.settings_check);

        //  holder.selected.setVisibility(View.INVISIBLE);

            convertView.setTag(holder);

            //holder.selected.setVisibility(View.INVISIBLE);

            holder.selected.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CheckBox cb = (CheckBox) v;
                    SectionsModel _state = (SectionsModel) cb.getTag();
                    _state.setSelected(cb.isChecked());
                }
            });
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        SectionsModel section = list.get(position);

        holder.setting.setText(section.getSection());
        holder.selected.setChecked(section.isSelected());

        holder.selected.setTag(section);

        return convertView;
    }

    @Override
    public int getCount() 
    {
        return super.getCount();
    }

    @Override
    public int getPosition(SectionsModel item) {

        return super.getPosition(item);
    }


}

UPDATE: In getview i just add following code AppConstants.ischeckboxvisible is variable where Appconstants is class and ischeckboxvisible is public static variable on that class. initially this variable is false

            if (!AppConstants.ischeckboxvisible)
            {
       holder.selected.setVisibility(View.INVISIBLE);
    }
        if (AppConstants.ischeckboxvisible)
            {
           holder.selected.setVisibility(View.VISIBLE);
        }

解决方案

Add another attribute to your SectionModel as inEditMode, and set it to true at all items in your array when user clicks edit, and call notifyDataSetChanged on your adapter.

In Adapter check that flag on every item and make them visible or invisible.

这篇关于单击按钮后,Android在自定义列表视图中隐藏和显示复选框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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