La soluzione sarebbe utilizzare RecyclerView insieme a GridLayoutManager. La chiave è informare l'adattatore delle modifiche agli elementi eliminati utilizzando notifyItemRemoved. C'è un sacco di spazio per la personalizzazione in RecyclerViews, come belle animazioni per scomparire oggetti, riorganizzazione di oggetti rimanenti sullo schermo, decorazioni per oggetti e così via. È possibile applicare tutte queste personalizzazioni e logica aggiuntiva all'eliminazione degli elementi necessari per il proprio particolare problema.
Attività
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<String> dataSet = getSampleDataSet();
recyclerView = (RecyclerView) findViewById(R.id.grid);
recyclerView.setAdapter(new MyAdapter(dataSet));
recyclerView.setLayoutManager(new GridLayoutManager(getApplicationContext(), 2));
}
private List<String> getSampleDataSet() {
List strings = new ArrayList();
strings.add("one");
strings.add("two");
strings.add("three");
strings.add("four");
strings.add("five");
strings.add("six");
return strings;
}
}
adattatore
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
List<String> dataSet;
public MyAdapter(List<String> dataSet) {
this.dataSet = dataSet;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
TextView tileView = (TextView) LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(tileView);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.view.setText(dataSet.get(position));
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dataSet.remove(position);
notifyItemRemoved(position); // this notifies the adapter about item being removed
}
});
}
@Override
public int getItemCount() {
return dataSet.size();
}
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView view;
public MyViewHolder(TextView itemView) {
super(itemView);
view = itemView;
}
}
layout Attività
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Griglia Articolo
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridItem"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorPrimary"
android:textColor="@android:color/white"
android:gravity="center"
android:text="Tile"/>
Risultati Prima:
Dopo aver fatto clic su 4. Su un dispositivo vero e proprio, si sarà in grado di vedere una bella animazione quadro di questa azione.