Problem with Gridview when rotating the screen

2

Hello People I am working with GRIDVIEW in an app, I have a problem when I turn the screen (the landscape) changes the images or duplicates me I do not know why, there is my code

 GridView androidGridView;
String scanneo;
EditText etSacnner;
String[] gridViewString = {
        "Capturar", "Pedidos ", "Canasto", "Stock", "Salir"};
int[] gridViewImageId = {
        R.drawable.qr,
        R.drawable.pedidos,
        R.drawable.canasto,
        R.drawable.stock,
        R.drawable.logoff};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu_inicio);
    etSacnner=(EditText)findViewById(R.id.etBuscarArt);

    //CustomGridViewActivity adapter = new CustomGridViewActivity(MenuInicio.this, gridViewString, gridViewImageId);
    androidGridView=(GridView)findViewById(R.id.gridView);
    androidGridView.setAdapter(new CustomGridViewActivity(this, gridViewString,gridViewImageId));
    androidGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int i, long id) {
            if(gridViewString[+i].equals("Scanear")){


            }

            Toast.makeText(MenuInicio.this, "GridView Item: " + gridViewString[+i], Toast.LENGTH_LONG).show();
        }
    });

}

many GRacias there is my adapter class

   private Context mContext;
private final String[] gridViewString;
private final int[] gridViewImageId;

public CustomGridViewActivity(Context context, String[] gridViewString, int[] gridViewImageId) {
    mContext = context;
    this.gridViewImageId = gridViewImageId;
    this.gridViewString = gridViewString;
}

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

@Override
public Object getItem(int i) {
    return null;
}

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

@Override
public View getView(int i, View convertView, ViewGroup parent) {
    View gridViewAndroid;
    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        gridViewAndroid = new View(mContext);
        gridViewAndroid = inflater.inflate(R.layout.grid_item_layout, null);
        TextView textViewAndroid = (TextView) gridViewAndroid.findViewById(R.id.grid_item_title);
        ImageView imageViewAndroid = (ImageView) gridViewAndroid.findViewById(R.id.grid_item_image);
        textViewAndroid.setText(gridViewString[i]);
        imageViewAndroid.setImageResource(gridViewImageId[i]);
    } else {
        gridViewAndroid = (View) convertView;
    }

    return gridViewAndroid;
}

and the screenshots before and after after turning

    
asked by user62207 27.10.2017 в 20:20
source

1 answer

2

The view must be reused in the Adapter but the properties must change, make this change in your method getView() of the Adapter:

@Override
public View getView(int i, View convertView, ViewGroup parent) {
    View gridViewAndroid;
    TextView textViewAndroid; 
    ImageView imageViewAndroid;

    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        gridViewAndroid = new View(mContext);
        gridViewAndroid = inflater.inflate(R.layout.grid_item_layout, null);
        textViewAndroid = (TextView) gridViewAndroid.findViewById(R.id.grid_item_title);
        imageViewAndroid = (ImageView) gridViewAndroid.findViewById(R.id.grid_item_image);

    } else {
        gridViewAndroid = (View) convertView;
    }

       //*Cambia propiedades  en las vistas.
       textViewAndroid.setText(gridViewString[i]);
       imageViewAndroid.setImageResource(gridViewImageId[i]);

    return gridViewAndroid;
}
    
answered by 27.10.2017 в 21:13