当前位置: 首页 > 知识库问答 >
问题:

试图突出显示GridView中的选定项

金秦斩
2023-03-14

我有一个Gridview,当我按下某个元素时,我想绘制背景。

我有一个适配器来动态加载gridview元素。我在适配器上有一个侦听器。在这个侦听器上,我用我想要的颜色放置背景,但它也会在列表中绘制另一个元素(我猜是在视图重新加载后,位置相同的元素)。

重要提示:我的最小API是9,我无法真正更改它。

以下是我的 getView 方法的代码(来自适配器):

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

    viewHolder = null;
    if (convertView == null) {

        viewHolder=new ViewHolder();

        LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view=layoutInflater.inflate(R.layout.highwayappselectionitem,parent, false);

        viewHolder.appImageIcon=(ImageView) view.findViewById(R.id.highwayGridViewItemIcon);
        viewHolder.appNameLabel=(TextView) view.findViewById(R.id.highwayGridViewItemName);
        viewHolder.appInfoButton = (ImageView) view.findViewById(R.id.highwayGridViewItemInfoButton);
        viewHolder.linearLayout = (LinearLayout) view.findViewById(R.id.HighwayGridViewItem);

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


    viewHolder.appNameLabel.setText(appsList.get(position).getAppName());
    viewHolder.appImageIcon.setImageDrawable(appsList.get(position).getImageIcon());


    view.setTag(viewHolder);

    viewHolder.linearLayout.setOnClickListener(new MyOnClickListener(position,0));

    return view;
}

下面是线性布局的侦听器(表示每个项目):

public void onClick(View v) {

        if(selectedView==0 || selectedView==1){

            appName=appsList.get(position).getAppName();
            filePath=appsList.get(position).getFilePath();
            appLogo=appsList.get(position).getImageIcon();

           v.setBackgroundColor(activity.getResources().getColor(R.color.light_grey));           

            System.out.println("Just pressed the app ... "+appName);
            System.out.println("His filePath is ... "+filePath);

            HighwayGridViewAppItem tmpSelectedItem= new HighwayGridViewAppItem(appLogo, appName, filePath);
            selectedAppsList.add(tmpSelectedItem);

            System.out.println("AppSelectionCUstomAdapter : Added a new application to the list of selected apps .!!!!!!!!!!!!!!!.........");
            System.out.println("AppselectioncustomAdaptaer  :   The size of the selectedAppsList is now  : "+selectedAppsList.size());

        }else{
            //pressed the info button
            System.out.println("This will be implemented later, need access to the webservices");
        }
    }
}

忽略if(所选视图==0或==1如果不再使用,我可以删除它...).

此外,应用程序列表是我自定义项目类的列表。在那里,我有一个布尔属性来表示它是否被选中。

正在发生的是,想象一下这个网格视图:

断续器

欧洲发展基金

高 H I

J K L公司

灰色线代表滚动……如果滚动,则会显示新元素。如果我按B,它会选择B,但也会选择H。

我试着做研究,但我发现的问题不一样。

可能会有所帮助。网格视图用于添加重复的元素,因此当我将元素添加到网格视图时,我会检查元素列表是否已经具有类似的元素,如果是这样,我不添加它。

共有1个答案

拓拔谭三
2023-03-14

当您想在选择后保留选定的某些网格视图项目时,您需要添加此行。

((BaseAdapter) gridView.getAdapter()).notifyDataSetChanged();

编辑 我认为getView方法中存在问题,这就是为什么您获得重复值的原因:

public View getView(int position, View convertView, ViewGroup parent) {
   View view = convertView;
    if (view== null) {  // if it's not recycled, initialize some attributes
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(     Context.LAYOUT_INFLATER_SERVICE );
        view = inflater.inflate(R.layout.highwayappselectionitem, parent, false);
    } 

}

 类似资料:
  • 我使用gridview在我的gridview中选择多个项目(图像)。 我使用< code > MultiChoiceModeListener 来实现这一点,问题是选中的项目没有突出显示 选择器xml: 当我触摸一个项目时,它被蓝色覆盖(我认为这是因为我使用了< code > GridView . setdrawselectorontop(true);)...我一抬起手指,蓝色就消失了。 我希望选择

  • 问题内容: 我找不到能帮助我解决Angular中这个简单问题的东西。与位置路径进行比较时,所有答案都与导航栏相关。 我使用list和构建了一个动态表。当我单击一行时,我试图为该行分配一个css类(选中),以突出显示该行已被用户选中的事实,并从先前突出显示的行中删除了该行。 我缺少在选定的行和CSS类分配之间进行绑定的方法。 我在每个()上应用了代码, 但我缺少应用更改的逻辑。 我的代码-Plunk

  • 实际行为 预期行为 至于我使用的代码,主加载了一个,其中调度页是真正的罪魁祸首,扩展了Xamarin.Forms.TabbedPage。SelectedPage被正确设置(加载正确的contentpage),但选项卡没有突出显示。 null

  • 我有一个从内部存储器加载图像的回收器视图。我想在单击时突出显示所选项。我试了很多方法,但都不起作用。实际上,我需要的是,当我在Recycler视图中单击任何项目时,该项目必须进入我的ArrayList,它也应该突出显示,当我单击或说unselect时,它必须再次变为正常。以下是我的代码: 这是我的适配器类:

  • 我一直在制作一个可以在Android中使用ListView的应用程序,但我无法使所选(chacked)项具有不同的背景。我用的是CHOICE_MODE_SINGLE。到目前为止,我的代码是这样的: 我使用的列表视图: (inside layout.xml) 我在适配器中使用的TextView布局: (listItem.xml) 这是我添加适配器的地方: 我确信在单击时选中了正确的项,因为当我调用g

  • 问题内容: 每当单元格的内容与用户的输入匹配时,我都希望突出显示JTable中的特定行。以下代码是我到目前为止可以使用的代码: 注意:是在源文件中全局作用域。 现在,此操作在某种程度上可行,但是我将其添加到内的。JTables是在程序运行时动态创建的。但是,该方法会使所有已创建的JTables中的所有特定单元格突出显示。 如何在所有JTable中保留单元格以保留其特定的突出显示单元,而不是让所有J