Android: cómo mostrar el gridview en blanco con el botón

Quiero mostrar cuadrículas dinámicas en blanco como esta

Red en blanco Intenté poblar la rejilla como esto pero para esto necesito enviar el arsenal int drawable a baseadapter.I saben su manera no derecha de hacer esto

Tenga en cuenta este escenario:

1) El usuario obtendrá este tipo de pantalla con una cuadrícula en blanco con el botón "+" para agregar imágenes a la cuadrícula y el botón "-" si existe una imagen en la cuadrícula

2) Aumentar la cuadrícula dinámicamente tan pronto como el usuario llena la segunda rejilla en blanco de GridView.

Considere esta pregunta también

He creado un enfoque ficticio para el problema (Para añadir modificar el Gridview dinámicamente):

Crear una actividad Main3Activity

public class Main3Activity extends AppCompatActivity implements ViewClickCallBack { private RecyclerView recyclerView; private GridAdapter gridAdapter; private List<Model> models = new ArrayList<>(); private final int SIZE_NEXT_ITEM = 5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); recyclerView = (RecyclerView) findViewById(R.id.grid_recycle); gridAdapter = new GridAdapter(this); getNextModel(); gridAdapter.setModels(models); RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 3); recyclerView.setLayoutManager(mLayoutManager); recyclerView.setAdapter(gridAdapter); } @Override public void viewClicked(int position) { models.get(position - 1).setUploaded(true);// Set the upload flag as true for the clicked item int gridItemCount = gridAdapter.getItemCount();// Get the total count of items in gridview if ((gridItemCount - position) == 1) { // check if the clicked item is second last, if yes then difference would be 1 getNextModel(); gridAdapter.setModels(models); } else { Toast.makeText(this, "Popup Image picker", Toast.LENGTH_SHORT).show(); } gridAdapter.notifyDataSetChanged(); } /** * Function to get the set (or next set) of objects that * we want to show in GRID view. * * These objects will be added to a list. * This list will act as data source for adapter **/ private void getNextModel() { for (int i = 0; i < SIZE_NEXT_ITEM; i++) { Model model = new Model(); model.setUploaded(false); models.add(model); } } } 

XML como activity_main3

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="work.sof.ghost.myapplication.Main3Activity"> <android.support.v7.widget.RecyclerView android:id="@+id/grid_recycle" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout> 

Un adaptador dice GridAdapter

 public class GridAdapter extends RecyclerView.Adapter<GridAdapter.GridViewHolder> { private ViewClickCallBack viewClickCallBack; private List<Model> models; public GridAdapter(ViewClickCallBack viewClickCallBack) { this.viewClickCallBack = viewClickCallBack; } class GridViewHolder extends RecyclerView.ViewHolder { public TextView textView; public GridViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.text_some); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (viewClickCallBack != null) { Log.e("Element Index", "" + getAdapterPosition()); /** * Increment the position by 1, as getAdapterPosition will * return the index (count starts from 0) of the element. * Hence, to simplify, we will increment the index by one, * so that when we calculate the second last element, we will * check the difference for 1. * */ viewClickCallBack.viewClicked(getAdapterPosition() + 1); } } }); } } @Override public GridViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.grid_view, parent, false); return new GridViewHolder(itemView); } @Override public void onBindViewHolder(GridViewHolder holder, int position) { Model model = getModel(position); if (model.isUploaded()) { holder.textView.setText("-"); } else { holder.textView.setText("+"); } } @Override public int getItemCount() { if (models != null) { return models.size(); } return 0; } private Model getModel(int position) { if (models != null) { return models.get(position); } return null; } public void setModels(List<Model> models) { this.models = models; } } 

Modelo de una clase modelo

 public class Model { private String imagePath; private boolean isUploaded; public String getImagePath() { return imagePath; } public void setImagePath(String imagePath) { this.imagePath = imagePath; } public boolean isUploaded() { return isUploaded; } public void setUploaded(boolean uploaded) { isUploaded = uploaded; } } 

Un diseño para la vista de cuadrícula (sé que no es lo mismo que se muestra en la pregunta :()

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_marginRight="5dp" android:background="@drawable/rect_drawable" android:orientation="vertical"> <ImageView android:src="@drawable/ic_launcher" android:id="@+id/image_holder" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_gravity="right" android:id="@+id/text_some" android:layout_margin="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="25sp" android:text="+" /> </LinearLayout> 

Un archivo dibujable rect_drawable

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="6dp" android:height="6dp" /> <solid android:color="@color/colorPrimary" /> </shape> 

Para la pregunta alternativa

" Cómo enviar varias imágenes al servidor a través de AsyncTask tan pronto como el usuario presione el botón Guardar o Hecho ":

Utilizar

a) executeOnExecutor (java.util.concurrent.Executor, Object []) con THREAD_POOL_EXECUTOR . Para enviar una imagen por tarea asíncrona en paralelo, Más información en https://developer.android.com/reference/android/os/AsyncTask.html

o

b) Puede seguir https://stackoverflow.com/a/7130806/1920735

Esto mostrará la interfaz de usuario de este modo introduzca la descripción de la imagen aquí

  • Error al crear apk - "Varios archivos dex definen Lcom / google / ads / Ad"
  • JNI: Del código C a Java y JNI
  • Obfuscate campos privados con ProGuard
  • Detección de frecuencia / tono para maniquíes
  • Anular los temas predeterminados de Android
  • ¿Cómo afectan las recientes vulnerabilidades de java a Android y la programación?
  • Retrofit 2.0 cómo eliminar?
  • Animación CardView
  • Android analizando la cadena hasta la fecha con SimpleDateFormat
  • Guardar los datos de acceso (preferencias) android
  • Android - Organizar niveles en un juego
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.