尝试从GridView突出显示所选项目

时间:2016-08-30 09:51:02

标签: android android-layout gridview android-gridview

我有一个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;
}

这里是linearlayout的监听器(代表每个项目):

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它不再被使用,我可以删除它......)。

此外,appsLIst是我的自定义项目列表。我有一个布尔属性来表示它是否被选中。

发生的事情是,想象一下这个gridview:

A B C

D E F

G H I

J K L

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

我尝试做研究,但我发现的问题并不相同。

可能有帮助的东西.. gridview用于添加重复的elemet,所以当我将元素添加到gridview时,我检查元素列表是否已经有一个类似的元素,如果是这样我不添加它。

1 个答案:

答案 0 :(得分:1)

如果要在选择后选择某个gridview项,则需要添加此行。

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

}