当前位置: 首页 > 面试题库 >

如何获取android list view选择器项以在屏幕外记住其状态?

闾丘成双
2023-03-14
问题内容

我创建了一个自定义列表视图,在每行的左侧有两个箭头(向上/向下投票)。使用选择器,我已经能够更改箭头的图像(颜色)并相应地更新投票。我的问题是,例如,如果我单击“投票”,则当我向下滚动足够远以使我投票过的列表项退出屏幕时,它将重置为原始未选中状态/图像。

这是我的获取视图方法

 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;
    }
}

问题答案:

所以我自己弄清楚了。这是由于对教程的深刻理解造成的。

我将一个对象传递给我的自定义适配器,我要做的就是在该对象内创建一些布尔变量,以存储是否在每一行上选中了复选框/选择器,然后在单击图像时适当地设置了这些变量。

这是我需要帮助的任何人的新getview()

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;
    }


 类似资料:
  • 我有一个JTable,在一列中,我为每行都有一个JComboBox。我在按下按钮时动态添加行。在组合框中所做的选择将确定对该特定行执行的计算。为了参数起见,假设组合框的选项是:选项1,选项2,选项3和选项4。 我遇到的问题如下: 假设我添加了2行,并从第1行的组合框中选择任何选项,当我去第2行的组合框中进行选择时,勾选与第1行相同的选择。似乎有某种记忆。如何禁用此功能,以便默认选择始终为-1(即非

  • 问题内容: 我正在开发一个需要屏幕DPI的应用程序。我检查了几个论坛,并获得了一个代码段,内容如下: 但是无论我的屏幕分辨率值是多少,该值都保持不变,为96。代码有什么问题? 对于同一件事,我得到了另一个代码,如下所示: 但是再一次,无论我的屏幕分辨率如何,返回的值都是相同的96。怎么了?我的代码是错误的还是我以错误的方式解释了它? 问题答案: 问题是没有人知道操作系统的确切物理尺寸,甚至连操作系

  • 问题内容: 我想知道是否可以使用tkinter计算屏幕尺寸。 我想要这样做,这样可以使程序在屏幕中央打开。 问题答案:

  • 我想处理一个选择菜单的测试场景,其中 spec 将选择一个随机选项,而不是当前选择的选项。我似乎找不到一个有效的定位器或方法可以让我做到这一点。 策略1:获取的当前索引,并从其他索引中随机选择 策略2:获取-获取数组的长度并选择随机数组。此选择器似乎忽略了部分,并返回选项总数 由于我对量角器很陌生,我真的没有看到一种方法来查看API。请问有什么提示吗?

  • 问题内容: 我将selenium1的代码转换为selenium2,找不到在下拉菜单中选择标签或获得下拉菜单的选定值的简便方法。您知道在Selenium 2中如何做吗? 这是两个在Selenium 1中起作用但不在2中起作用的语句: 问题答案: 查看硒文档中有关使用webdriver 填写表单的部分以及Select类的javadoc 。 要基于标签选择一个选项: 要获得第一个选定的值:

  • 对于使用箭头键,首先必须存储它以分析它。这就是为什么我使用来存储它。但是当我尝试运行这段代码时,当我按下向上键时,它显示,当我按下回车键时,这个删除并退出程序,而不打印和