我怎样才能Android的列表视图中选择项目要记住自己的状态,关闭屏幕?自己的、视图、要记住、屏幕

由网友(三岁就撩汉)分享简介:我已创建自定义列表视图,它具有两个箭头(上/下进行表决)上的每一行的左侧。使用选择我已经能够相应地改变箭头的图像(彩色),并更新了票。我的问题是,如果我点击投票了,例如,当我向下滚动,足以使该列表项我投上熄灭它重置为原始未选中状态/图像在屏幕上。这是我获取视图的方法公开查看getView(最终诠释的立场,观点conve...

我已创建自定义列表视图,它具有两个箭头(上/下进行表决)上的每一行的左侧。使用选择我已经能够相应地改变箭头的图像(彩色),并更新了票。我的问题是,如果我点击投票了,例如,当我向下滚动,足以使该列表项我投上熄灭它重置为原始未选中状态/图像在屏幕上。

这是我获取视图的方法

 公开查看getView(最终诠释的立场,观点convertView,父母的ViewGroup)
    {
        //创建我们前面定义的ViewHolder。
        最后ViewHolder持有人=新ViewHolder();

        //创建LayoutInflator的充气行布局。
        LayoutInflater充气=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //夸大我们前面定义的行布局。
        convertView = inflator.inflate(R.layout.partylist,NULL);

        //设置意见到ViewHolder。
        holder.title =(TextView中)convertView.findViewById(R.id.title);
        holder.voteUp =(ImageView的)convertView.findViewById(R.id.vote_up_image);
        holder.voteUp.setTag(位置);
        holder.voteDown =(ImageView的)convertView.findViewById(R.id.vote_down_image);
        holder.voteDown.setTag(位置);
        holder.votes =(TextView中)convertView.findViewById(R.id.votes);

        //定义onClickListener为ImageView的。
        holder.voteUp.setOnClickListener(新OnClickListener()
        {
            @覆盖
            公共无效的onClick(视图v)
            {
                如果(v.isSelected()){
                    v.setSelected(假);
                    holder.votes.setText(将String.valueOf((list.get(位置).votes)));
                } 其他 {
                    如果(holder.voteDown.isSelected()){
                    v.setSelected(真正的);
                    holder.voteDown.setSelected(假);
                    holder.votes.setText(将String.valueOf((list.get(位置).votes + 1)));
                    }其他{
                        v.setSelected(真正的);
                    }
                }

                //Toast.makeText(PartyActivity.this,图片来源行+位置+是pressed+ list.get(位置).title伪,Toast.LENGTH_LONG).show();
            }
        });

        holder.voteDown.setOnClickListener(新OnClickListener()
        {
            @覆盖
            公共无效的onClick(查看W)
            {
                如果(w.isSelected()){
                    w.setSelected(假);
                    holder.votes.setText(将String.valueOf((list.get(位置).votes)));
                } 其他 {
                    如果(holder.voteUp.isSelected()){
                    w.setSelected(真正的);
                    holder.voteUp.setSelected(假);
                    holder.votes.setText(将String.valueOf((list.get(位置).votes-1)));
                    }其他{
                        w.setSelected(真正的);
                    }
                }

                //Toast.makeText(PartyActivity.this,图片来源行+位置+是pressed+ list.get(位置).title伪,Toast.LENGTH_LONG).show();
            }
        });


        //设置数据到了ViewHolder。
        holder.title.setText(list.get(位置).title伪);
        holder.votes.setText(将String.valueOf(list.get(位置).votes));
        //返回的行视图。
        返回convertView;
    }
}
 

解决方案

所以,我理解了它自己。它是由教程一个可怕的理解造成的。

我的对象传递给我的自定义适配器和所有我所要做的就是创建对象里面的几个布尔变量来存储是否复选框/选择器中的每一行上选择,然后适当地设置这些变量,当图像被点击。

我的继承人新getview()的人谁需要帮助

 公开查看getView(最终诠释的立场,观点convertView,父母的ViewGroup)
    {
        //创建我们前面定义的ViewHolder。
        最后ViewHolder持有人=新ViewHolder();

        //创建LayoutInflator的充气行布局。
        LayoutInflater充气=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //夸大我们前面定义的行布局。
        convertView = inflator.inflate(R.layout.partylist,NULL);

        //设置意见到ViewHolder。
        holder.title =(TextView中)convertView.findViewById(R.id.title);
        holder.voteUp =(复选框)convertView.findViewById(R.id.vote_up_image);
        holder.voteUp.setTag(位置);
        holder.voteDown =(复选框)convertView.findViewById(R.id.vote_down_image);
        holder.voteDown.setTag(位置);
        holder.votes =(TextView中)convertView.findViewById(R.id.votes);




        //定义onClickListener为ImageView的。

        holder.voteUp.setOnCheckedChangeListener(新OnCheckedChangeListener()
        {
            公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked)
            {
                如果(holder.voteUp.isSelected()){
                    holder.voteUp.setSelected(假);
                    list.get(位置).UP = FALSE;
                    holder.votes.setText(将String.valueOf((list.get(位置).votes)));
                } 其他 {
                    如果(holder.voteDown.isSelected()){
                    holder.voteUp.setSelected(真正的);
                    holder.voteDown.setSelected(假);
                    list.get(位置).UP = TRUE;
                    list.get(位置).Down = FALSE;
                    holder.votes.setText(将String.valueOf((list.get(位置).votes + 1)));
                    }其他{
                        holder.voteUp.setSelected(真正的);
                        list.get(位置).UP = TRUE;
                        holder.votes.setText(将String.valueOf((list.get(位置).votes + 1)));
                    }

            }}
        });

        holder.voteDown.setOnCheckedChangeListener(新OnCheckedChangeListener()
        {
            公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked)
            {// Toast.makeText(PartyActivity.this,图片来源行+位置+是pressed+ list.get(位置).title伪,Toast.LENGTH_LONG).show();
                如果(holder.voteDown.isSelected()){
                    holder.voteDown.setSelected(假);
                    list.get(位置).Down = FALSE;
                    holder.votes.setText(将String.valueOf((list.get(位置).votes)));
                } 其他 {
                    如果(holder.voteUp.isSelected()){
                    holder.voteDown.setSelected(真正的);
                    holder.voteUp.setSelected(假);
                    list.get(位置).Down = TRUE;
                    list.get(位置).UP = FALSE;
                    holder.votes.setText(将String.valueOf((list.get(位置).votes-1)));
                    }其他{
                        holder.voteDown.setSelected(真正的);
                        list.get(位置).Down = TRUE;
                        holder.votes.setText(将String.valueOf((list.get(位置).votes-1)));
                    }

            }}
        });


        //设置数据到了ViewHolder。
        holder.title.setText(list.get(位置).title伪);
        holder.votes.setText(将String.valueOf(list.get(位置).votes));
        holder.voteUp.setChecked(list.get(位置).UP);
        holder.voteDown.setChecked(list.get(位置).Down);
        //返回的行视图。
        返回convertView;
    }
 

如何在Android的自定义列表视图中使用搜索功能

I have created a custom list view that has two arrows (up/down for voting) on the left side of each row. Using selectors I have been able to change the image(colour) of the arrows and update the votes accordingly. My problem is that if I click vote up for example, as soon as i scroll down far enough so that the list item i voted on goes off the screen it resets to the original un-checked state/image.

here's my get view method

 public View getView(final int position, View convertView, ViewGroup parent)
    {
        //creating the ViewHolder we defined earlier.
        final ViewHolder holder = new ViewHolder(); 

        //creating LayoutInflator for inflating the row layout.
        LayoutInflater inflator = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //inflating the row layout we defined earlier.
        convertView = inflator.inflate(R.layout.partylist, null);

        //setting the views into the ViewHolder.
        holder.title = (TextView) convertView.findViewById(R.id.title);
        holder.voteUp = (ImageView) convertView.findViewById(R.id.vote_up_image);
        holder.voteUp.setTag(position);
        holder.voteDown = (ImageView) convertView.findViewById(R.id.vote_down_image);
        holder.voteDown.setTag(position);
        holder.votes = (TextView) convertView.findViewById(R.id.votes);

        //define an onClickListener for the ImageView.
        holder.voteUp.setOnClickListener(new OnClickListener() 
        {           
            @Override
            public void onClick(View v) 
            { 
                if (v.isSelected()){
                    v.setSelected(false);
                    holder.votes.setText(String.valueOf((list.get(position).votes)));
                } else {
                    if (holder.voteDown.isSelected()){
                    v.setSelected(true);
                    holder.voteDown.setSelected(false);
                    holder.votes.setText(String.valueOf((list.get(position).votes+1)));
                    }else{
                        v.setSelected(true);
                    }
                }

                //Toast.makeText(PartyActivity.this, "Image from row " + position + " was pressed " + list.get(position).title, Toast.LENGTH_LONG).show();
            }
        });

        holder.voteDown.setOnClickListener(new OnClickListener() 
        {           
            @Override
            public void onClick(View w) 
            { 
                if (w.isSelected()){
                    w.setSelected(false);
                    holder.votes.setText(String.valueOf((list.get(position).votes)));
                } else {
                    if (holder.voteUp.isSelected()){
                    w.setSelected(true);
                    holder.voteUp.setSelected(false);
                    holder.votes.setText(String.valueOf((list.get(position).votes-1)));
                    }else{
                        w.setSelected(true);
                    }
                }

                //Toast.makeText(PartyActivity.this, "Image from row " + position + " was pressed " + list.get(position).title, Toast.LENGTH_LONG).show();
            }
        });


        //setting data into the the ViewHolder.
        holder.title.setText(list.get(position).title);
        holder.votes.setText(String.valueOf(list.get(position).votes));
        //return the row view.
        return convertView;
    }
}

解决方案

So I figured it out myself. It was caused by a terrible understanding of tutorials.

I pass an object to my custom adapter and all I had to do was create a few boolean variables inside the object to store whether the checkbox/selectors were selected on each row and then set those variables appropriately when the images were clicked.

heres my new getview() for anyone who needs help

public View getView(final int position, View convertView, ViewGroup parent)
    {
        //creating the ViewHolder we defined earlier.
        final ViewHolder holder = new ViewHolder(); 

        //creating LayoutInflator for inflating the row layout.
        LayoutInflater inflator = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //inflating the row layout we defined earlier.
        convertView = inflator.inflate(R.layout.partylist, null);

        //setting the views into the ViewHolder.
        holder.title = (TextView) convertView.findViewById(R.id.title);
        holder.voteUp = (CheckBox) convertView.findViewById(R.id.vote_up_image);
        holder.voteUp.setTag(position);
        holder.voteDown = (CheckBox) convertView.findViewById(R.id.vote_down_image);
        holder.voteDown.setTag(position);
        holder.votes = (TextView) convertView.findViewById(R.id.votes);




        //define an onClickListener for the ImageView.

        holder.voteUp.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if (holder.voteUp.isSelected()){
                    holder.voteUp.setSelected(false);
                    list.get(position).Up=false;
                    holder.votes.setText(String.valueOf((list.get(position).votes)));
                } else {
                    if (holder.voteDown.isSelected()){
                    holder.voteUp.setSelected(true);
                    holder.voteDown.setSelected(false);
                    list.get(position).Up=true;
                    list.get(position).Down=false;
                    holder.votes.setText(String.valueOf((list.get(position).votes+1)));
                    }else{
                        holder.voteUp.setSelected(true);
                        list.get(position).Up=true;
                        holder.votes.setText(String.valueOf((list.get(position).votes+1)));
                    }

            }}
        });

        holder.voteDown.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {// Toast.makeText(PartyActivity.this, "Image from row " + position + " was pressed " + list.get(position).title, Toast.LENGTH_LONG).show();
                if (holder.voteDown.isSelected()){
                    holder.voteDown.setSelected(false);
                    list.get(position).Down=false;
                    holder.votes.setText(String.valueOf((list.get(position).votes)));
                } else {
                    if (holder.voteUp.isSelected()){
                    holder.voteDown.setSelected(true);
                    holder.voteUp.setSelected(false);
                    list.get(position).Down=true;
                    list.get(position).Up=false;
                    holder.votes.setText(String.valueOf((list.get(position).votes-1)));
                    }else{
                        holder.voteDown.setSelected(true);
                        list.get(position).Down=true;
                        holder.votes.setText(String.valueOf((list.get(position).votes-1)));
                    }

            }}
        }); 


        //setting data into the the ViewHolder.
        holder.title.setText(list.get(position).title);
        holder.votes.setText(String.valueOf(list.get(position).votes));
        holder.voteUp.setChecked(list.get(position).Up);
        holder.voteDown.setChecked(list.get(position).Down);
        //return the row view.
        return convertView;
    }

阅读全文

相关推荐

最新文章