listView dynamic add item

ListView para agregar elementos dynamics, pero hay un problema acerca de Smooth add. hay textView y botón en mi listActivity, Iwant to Press button, luego el texto de TextView puede agregarse automáticamente a ListView , pero presioné el botón, no funciona, a menos que después de ingresar el contenido, presione la tecla “OK”, luego presione el botón, TextView's texto TextView's puede agregarse automáticamente a ListView . No se por que. Si presiono continuamente el botón, como 3 veces, luego presiono la tecla “Aceptar”, el contenido

auto agregar lista

Ver mas 3 veces.

  public class DynamicListItems extends ListActivity { private static final String ITEM_KEY = "key"; ArrayList<HashMap> list= new ArrayList<HashMap>(); private SimpleAdapter adapter; private EditText newValue;@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dynamic_list); newValue = (EditText) findViewById(R.id.new_value_field); setListAdapter(new SimpleAdapter(this, list, R.layout.row, new String[] { ITEM_KEY }, new int[] { R.id.list_value })); ((ImageButton) findViewById(R.id.button)).setOnClickListener(getBtnClickListener()); } private OnClickListener getBtnClickListener() { return new OnClickListener() { public void onClick(View view) { try { HashMap item = new HashMap(); item.put(ITEM_KEY, newValue.getText().toString()); list.add(item); adapter.notifyDataSetChanged(); } catch (NullPointerException e) { Log.i("[Dynamic Items]", "Tried to add null value"); } } }; }} 

¿Cómo eliminar dinámicamente el artículo?

  • dynamic_list.xml solo contiene listView, button, textView
  • row.xml contiene TextView

El método notifyDataSetChanged () se usa para actualizar el adaptador.

Aquí estoy publicando una respuesta de trabajo paso a paso.

Primero del archivo main.xml :

              

Aquí MainActivity.java :

 import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class MainActivity extends Activity { private EditText etInput; private Button btnAdd; private ListView lvItem; private ArrayList itemArrey; private ArrayAdapter itemAdapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dyanamic_list); setUpView(); } private void setUpView() { etInput = (EditText)this.findViewById(R.id.editText_input); btnAdd = (Button)this.findViewById(R.id.button_add); lvItem = (ListView)this.findViewById(R.id.listView_items); itemArrey = new ArrayList(); itemArrey.clear(); itemAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,itemArrey); lvItem.setAdapter(itemAdapter); btnAdd.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { addItemList(); } }); etInput.setOnKeyListener(new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { addItemList(); } return true; } }); } protected void addItemList() { if (isInputValid(etInput)) { itemArrey.add(0,etInput.getText().toString()); etInput.setText(""); itemAdapter.notifyDataSetChanged(); } } protected boolean isInputValid(EditText etInput2) { if (etInput2.getText().toString().trim().length()<1) { etInput2.setError("Please Enter Item"); return false; } else { return true; } } } 

¿Su método getBtnClickListener es parte de la clase ListActivity o ArrayAdapter ?

Para mí, cuando actualizo desde la clase ListActivity , uso este código …

 // code to add a Contact to my database // code to add a Contact to the list that // that is used by the ListView setListAdapter(adapter); getListView().setTextFilterEnabled(true); 

Cuando estoy actualizando desde un método dentro de la clase ArrayAdapter , uso este código …

  // from a LongPress on a ListView item convertView.setOnLongClickListener(new OnLongClickListener(){ @Override public boolean onLongClick(View view) { view.performHapticFeedback(0, View.HAPTIC_FEEDBACK_ENABLED); // code to remove a Contact name from my database // code to remove that Contact name from my list // that is used by the ListView ContactsAdapter.this.notifyDataSetChanged(); return true; }); 

Utilizo un hilo para agregar más datos a mi lista en segundo plano y luego notifydatasetchange , funciona con éxito

Aquí hay un código completo: http://code.google.com/p/dynamic-listview/source/checkout

¡Sí! El método notifyDataSetChanged () aplicado en el ArrayAdapter antes de rellenarlo, fue la solución para mí. Lectura de Firebase.

Objetos

  private DatabaseReference myRef; ArrayList lista; ArrayAdapter adapter; 

OnCreate

  FirebaseDatabase database = FirebaseDatabase.getInstance(); myRef = database.getReference("chat"); //GETTIN MY DATA TO SHOW IN CHAT lista = new ArrayList(); 

En resumen

  myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot postSnappy : dataSnapshot.getChildren()){ for (DataSnapshot rePostSnappy : postSnappy.getChildren()){ // Defined Array values to show in ListView lista.add(new String(rePostSnappy.getValue().toString())); adapter.notifyDataSetChanged();//Notyfing adapter that will goes to change } } } @Override public void onCancelled(DatabaseError databaseError) { } }); adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, lista); ListView listVista = (ListView) findViewById(R.id.list); listVista.setAdapter(adapter);