2017-08-06 1 views
1

私は本当に驚いています、コードで起こっていること、グリッドビューのアイテムは、毎回11位、12位で重複していることがあります。GridView重複したアイテムを表示

enter image description here

あなたは「デスクトップ」グリッドは二度取り込まれている見ることができます。定数ファイルから

グリッドアイコン&名

public static final String[] values = { 
      DESKTOP, 
      LAPTOP, 
      SERVER, 
      PRINTER, 
      NETWORK_SUPPORT, 
      AIR_CONTITION, 
      CCTV_CAMERA, 
      ALL_IN_ONE_PC, 
      HOME_CLEANING, 
      APPLICANCE_REPAIR, 
      ELECTRICITY, 
      PLUMBING 
    }; 

    public static final int[] images = { 
      R.drawable.desktop_pc_icon, 
      R.drawable.laptop_pc_icon, 
      R.drawable.server_icon, 
      R.drawable.printer_icon, 
      R.drawable.network_support_icon, 
      R.drawable.aircondition_icon, 
      R.drawable.cctv_camera_icon, 
      R.drawable.all_in_one_pc_icon, 
      R.drawable.home_cleaning_icon, 
      R.drawable.appliance_repair_icon, 
      R.drawable.electrical_icon, 
      R.drawable.plumbing_icon 
    }; 

final GridView mainGrid = (GridView) findViewById(R.id.main_grid); 
     mainGrid.setAdapter(new GridAdapter(MainActivity.this, AppConstants.productsId, AppConstants.values, AppConstants.images)); 

グリッドアダプタ

public class GridAdapter extends BaseAdapter { 

    private final String[] productsId; 
    private final String[] values; 
    private final int[] images; 
    private Context context; 
    private LayoutInflater layoutInflater; 

    public GridAdapter(final Context context, final String [] productsId, final String[] values, final int[] images) { 
     this.context = context; 
     this.productsId = productsId; 
     this.values = values; 
     this.images = images; 
    } 

    @Override 
    public int getCount() { 
     return productsId.length; 
    } 

    @Override 
    public Object getItem(final int i) { 
     return values[i]; 
    } 

    @Override 
    public long getItemId(final int i) { 
     return 0; 
    } 

    @Override 
    public View getView(final int i, View view, final ViewGroup viewGroup) { 
     layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (view == null) { 
      view = layoutInflater.inflate(R.layout.single_grid_item, null); 

      //Grid Text 
      final TextView gridText = view.findViewById(R.id.grid_text); 
      gridText.setText(values[i]); 

      //Grid Image 
      final ImageView gridImage = view.findViewById(R.id.grid_image); 
      gridImage.setImageResource(images[i]); 
     } 
     return view; 
    } 
} 
(のonCreate方法で) グリッド採用企業の設定

答えて

1
は、以下のようなあなたの getViewを変更

、あなたはアイテムにそれがgetViewを呼び出すたびに更新する必要がありますが、あなたのケースでは、ビューがnullの場合にのみ更新します。この問題は、ビューを再利用するために発生します。

@Override 
public View getView(final int i, View view, final ViewGroup viewGroup) { 
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (view == null) { 
     view = layoutInflater.inflate(R.layout.single_grid_item, null); 


    } 

    //Grid Text 
    final TextView gridText = view.findViewById(R.id.grid_text); 
    gridText.setText(values[i]); 

    //Grid Image 
    final ImageView gridImage = view.findViewById(R.id.grid_image); 
    gridImage.setImageResource(images[i]); 
    return view; 
} 
関連する問題