自定义网格视图,总计项目在android网格视图中一次又一次地重复

时间:2017-05-19 06:53:23

标签: android gridview

enter image description here 在自定义gridview中安装应用程序。当我们重新打开grid.view所有项目都是双倍时,再次打开网格视图项目变为三元组。

  
      
  1. MainAvtivity.java
  2.   
case R.id.edit_quick_links: {

            gridView = new GridView(HomeActivity.this);
            installedApps = getInstalledApps();
            final GridViewAdapter gridViewAdapter = new GridViewAdapter(HomeActivity.this, installedApps, mSelctedAppsList);
            gridView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
            gridView.setAdapter(gridViewAdapter);
            gridView.setNumColumns(5);
            }
  
      
  1. GridViewAdapter.java
  2.   
    public class GridViewAdapter<T> extends BaseAdapter {
    private Context context;
    private LayoutInflater layoutInflater;
    List<AppList> listStorage;
    MainActivity homeactivity;
    private int selectedIndex;
    private int selectedColor = Color.parseColor("#1b1b1b");
    SparseBooleanArray mSparseBooleanArray;
    public GridViewAdapter(Context context, List<AppList> customizedListView) {
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.context = context;
    listStorage = customizedListView;
    mSparseBooleanArray = new SparseBooleanArray();
    }
    public void setSelectedIndex(int ind) {
    selectedIndex = ind;
    notifyDataSetChanged();
    }
    public ArrayList<T> getCheckedItems() {
    ArrayList<T> mTempArry = new ArrayList<T>();
    for (int i = 0; i < listStorage.size(); i++) {
        if (mSparseBooleanArray.get(i)) {
            mTempArry.add((T) listStorage.get(i));
        }
    }
    return mTempArry;
    }
    @Override
    public int getCount() {
    return listStorage.size();
    }
    public Object getItem(int position) {
    return listStorage.get(position);
    }
    @Override
    public long getItemId(int position) {
    return 0;
    }
    @Override
    public View getView(final int position, View convertView,     ViewGroup parent) {
    ViewHolder listViewHolder;
    if (convertView == null) {
        listViewHolder = new ViewHolder();
        convertView =    layoutInflater.inflate(R.layout.add_apps_grid_item, parent, false);
        listViewHolder.textInListView = (TextView) convertView.findViewById(R.id.item_name);
        listViewHolder.imageInListView = (ImageView) convertView.findViewById(R.id.item_type);
        listViewHolder.tvPkgName = (TextView) convertView.findViewById(R.id.tvPack);
        listViewHolder.select_app = (CheckBox) convertView.findViewById(R.id.select_app);
        convertView.setTag(listViewHolder);
        } else {
        listViewHolder = (ViewHolder) convertView.getTag();
        }
        byte[] getIcondata = listStorage.get(position).getIcon();
        Drawable image = new BitmapDrawable(BitmapFactory.decodeByteArray(getIcondata, 0, getIcondata.length));       listViewHolder.textInListView.setText(listStorage.get(position).getName());
         listViewHolder.imageInListView.setImageDrawable(image);
                 listViewHolder.tvPkgName.setText(listStorage.get(position).getPackageName());
         listViewHolder.select_app.setTag(position);     listViewHolder.select_app.setChecked(mSparseBooleanArray.get(position));
          listViewHolder.select_app.setOnCheckedChangeListener(new OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked);
                 }
              });
    return convertView;
              }
          OnCheckedChangeListener mCheckedChangeListener = new OnCheckedChangeListener() {
    @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                 boolean isChecked) {
        mSparseBooleanArray.put((Integer) buttonView.getTag(),  isChecked);
              }
             };

            static class ViewHolder{
                TextView textInListView, tvPkgName;
                ImageView imageInListView;
                CheckBox select_app;
            }
  }

1 个答案:

答案 0 :(得分:0)

解决问题已解决。 在调用适配器类清除列表之前。 installedApps.clear();