tutorial tipos studio objetos inflar eliminar datos con como columnas agregar android listview dynamic

tipos - sharedpreferences listview android



Añadir dinámicamente elementos a un listView de Android (5)

Primero, debe agregar un ListView, un EditText y un botón en su activity_main.xml.

Ahora, en tu ActivityMain:

private EditText editTxt; private Button btn; private ListView list; private ArrayAdapter<String> adapter; private ArrayList<String> arrayList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTxt = (EditText) findViewById(R.id.editText); btn = (Button) findViewById(R.id.button); list = (ListView) findViewById(R.id.listView); arrayList = new ArrayList<String>(); // Adapter: You need three parameters ''the context, id of the layout (it will be where the data is shown), // and the array that contains the data adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, arrayList); // Here, you set the data in your ListView list.setAdapter(adapter); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // this line adds the data of your EditText and puts in your array arrayList.add(editTxt.getText().toString()); // next thing you have to do is check if your adapter has changed adapter.notifyDataSetChanged(); } }); }

Esto me funciona, espero haberte ayudado.

¿Alguien puede explicar o sugerir un tutorial para crear un listView en Android?

Aquí están mis requisitos:

  • Debería poder agregar dinámicamente nuevos elementos presionando un botón.
  • Debe ser lo suficientemente simple de entender (posiblemente sin mejoras de rendimiento o conversión, por ejemplo)

Sé que hay bastantes preguntas sobre este tema, publicadas aquí en StackOverflow, pero no pude encontrar ninguna que respondiera mi pregunta. ¡Gracias!


Si desea tener el ListView en una AppCompatActivity en lugar de ListActivity, puede hacer lo siguiente (Modificar la respuesta de @ Shardul):

public class ListViewDemoActivity extends AppCompatActivity { //LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS ArrayList<String> listItems=new ArrayList<String>(); //DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LISTVIEW ArrayAdapter<String> adapter; //RECORDING HOW MANY TIMES THE BUTTON HAS BEEN CLICKED int clickCounter=0; private ListView mListView; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.activity_list_view_demo); if (mListView == null) { mListView = (ListView) findViewById(R.id.listDemo); } adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); setListAdapter(adapter); } //METHOD WHICH WILL HANDLE DYNAMIC INSERTION public void addItems(View v) { listItems.add("Clicked : "+clickCounter++); adapter.notifyDataSetChanged(); } protected ListView getListView() { if (mListView == null) { mListView = (ListView) findViewById(R.id.listDemo); } return mListView; } protected void setListAdapter(ListAdapter adapter) { getListView().setAdapter(adapter); } protected ListAdapter getListAdapter() { ListAdapter adapter = getListView().getAdapter(); if (adapter instanceof HeaderViewListAdapter) { return ((HeaderViewListAdapter)adapter).getWrappedAdapter(); } else { return adapter; } } }

Y en tu diseño en lugar de usar android:id="@android:id/list" puedes usar android:id="@+id/listDemo"

Así que ahora puede tener un ListView dentro de una AppCompatActivity normal.


en lugar de

listItems.add("New Item"); adapter.notifyDataSetChanged();

puedes llamar directamente

adapter.add("New Item");


Código para el archivo MainActivity.java.

public class MainActivity extends Activity { ListView listview; Button Addbutton; EditText GetValue; String[] ListElements = new String[] { "Android", "PHP" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.listView1); Addbutton = (Button) findViewById(R.id.button1); GetValue = (EditText) findViewById(R.id.editText1); final List < String > ListElementsArrayList = new ArrayList < String > (Arrays.asList(ListElements)); final ArrayAdapter < String > adapter = new ArrayAdapter < String > (MainActivity.this, android.R.layout.simple_list_item_1, ListElementsArrayList); listview.setAdapter(adapter); Addbutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ListElementsArrayList.add(GetValue.getText().toString()); adapter.notifyDataSetChanged(); } }); } }

Código para el archivo de diseño activity_main.xml.

<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="com.listviewaddelementsdynamically_android_examples .com.MainActivity" > <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/editText1" android:layout_centerHorizontal="true" android:text="ADD Values to listview" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="26dp" android:ems="10" android:hint="Add elements listView" /> <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/button1" android:layout_centerHorizontal="true" > </ListView> </RelativeLayout>

Captura de pantalla


Cree primero un diseño XML en la carpeta res/layout/main.xml su proyecto:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/addBtn" android:text="Add New Item" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="addItems"/> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:drawSelectorOnTop="false" /> </LinearLayout>

Este es un diseño simple con un botón en la parte superior y una vista de lista en la parte inferior. Tenga en cuenta que el ListView tiene el id @android:id/list que define el ListView predeterminado que puede usar un ListActivity .

public class ListViewDemo extends ListActivity { //LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS ArrayList<String> listItems=new ArrayList<String>(); //DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LISTVIEW ArrayAdapter<String> adapter; //RECORDING HOW MANY TIMES THE BUTTON HAS BEEN CLICKED int clickCounter=0; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); setListAdapter(adapter); } //METHOD WHICH WILL HANDLE DYNAMIC INSERTION public void addItems(View v) { listItems.add("Clicked : "+clickCounter++); adapter.notifyDataSetChanged(); } }

android.R.layout.simple_list_item_1 es el diseño de elemento de lista predeterminado suministrado por Android, y puede utilizar este diseño de stock para cosas no complejas.

listItems es una lista que contiene los datos mostrados en el ListView. Toda la inserción y eliminación debe hacerse en listItems ; los cambios en listItems deben reflejarse en la vista. Eso es manejado por el ArrayAdapter<String> adapter , que debe ser notificado usando:

adapter.notifyDataSetChanged();

Un adaptador se crea una instancia con 3 parámetros: el contexto, que podría ser su activity/listactivity ; el diseño de su elemento de lista individual; y por último, la lista, que es la información real que se mostrará en la lista.