tipos studio personalizado elementos ejemplo dinamico desplegable con botones agregar android android-listview add

personalizado - listview dinamico android studio



ListView con Agregar y Eliminar botones en cada fila en Android (3)

Primero deberá crear un diseño personalizado xml que representará un solo elemento en su lista. Agregará sus dos botones a este diseño junto con cualquier otro elemento que desee mostrar de su lista.

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/list_item_string" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:paddingLeft="8dp" android:textSize="18sp" android:textStyle="bold" /> <Button android:id="@+id/delete_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:text="Delete" /> <Button android:id="@+id/add_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@id/delete_btn" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:text="Add" /> </RelativeLayout>

A continuación, deberá crear una clase ArrayAdapter personalizada que usará para inflar su diseño xml, así como para manejar sus botones y eventos de clic.

public class MyCustomAdapter extends BaseAdapter implements ListAdapter { private ArrayList<String> list = new ArrayList<String>(); private Context context; public MyCustomAdapter(ArrayList<String> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int pos) { return list.get(pos); } @Override public long getItemId(int pos) { return list.get(pos).getId(); //just return 0 if your list items do not have an Id variable. } @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.my_custom_list_layout, null); } //Handle TextView and display string from your list TextView listItemText = (TextView)view.findViewById(R.id.list_item_string); listItemText.setText(list.get(position)); //Handle buttons and add onClickListeners Button deleteBtn = (Button)view.findViewById(R.id.delete_btn); Button addBtn = (Button)view.findViewById(R.id.add_btn); deleteBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //do something list.remove(position); //or some other task notifyDataSetChanged(); } }); addBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //do something notifyDataSetChanged(); } }); return view; } }

Finalmente, en su actividad puede crear instancias de su clase ArrayAdapter personalizada y configurarla en su vista de lista.

public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_activity); //generate list ArrayList<String> list = new ArrayList<String>(); list.add("item1"); list.add("item2"); //instantiate custom adapter MyCustomAdapter adapter = new MyCustomAdapter(list, this); //handle listview and assign adapter ListView lView = (ListView)findViewById(R.id.my_listview); lView.setAdapter(adapter); }

¡Espero que esto ayude!

Estoy desarrollando una aplicación de Android en la que hice un ListView. Tengo que agregar 2 botones con cada fila en ListView. Estos 2 botones son Agregar y Eliminar. Cuando el usuario selecciona uno de los botones, se deben tomar algunas medidas. ¿Cómo puedo hacerlo?


en el botón eliminar clic evento

public void delete(View v){ ListView listview1; ArrayList<E> datalist; final int position = listview1.getPositionForView((View) v.getParent()); datalist.remove(position); myAdapter.notifyDataSetChanged(); }


public class UserCustomAdapter extends ArrayAdapter<User> { Context context; int layoutResourceId; ArrayList<User> data = new ArrayList<User>(); public UserCustomAdapter(Context context, int layoutResourceId, ArrayList<User> data) { super(context, layoutResourceId, data); this.layoutResourceId = layoutResourceId; this.context = context; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; UserHolder holder = null; if (row == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new UserHolder(); holder.textName = (TextView) row.findViewById(R.id.textView1); holder.textAddress = (TextView) row.findViewById(R.id.textView2); holder.textLocation = (TextView) row.findViewById(R.id.textView3); holder.btnEdit = (Button) row.findViewById(R.id.button1); holder.btnDelete = (Button) row.findViewById(R.id.button2); row.setTag(holder); } else { holder = (UserHolder) row.getTag(); } User user = data.get(position); holder.textName.setText(user.getName()); holder.textAddress.setText(user.getAddress()); holder.textLocation.setText(user.getLocation()); holder.btnEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.i("Edit Button Clicked", "**********"); Toast.makeText(context, "Edit button Clicked", Toast.LENGTH_LONG).show(); } }); holder.btnDelete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.i("Delete Button Clicked", "**********"); Toast.makeText(context, "Delete button Clicked", Toast.LENGTH_LONG).show(); } }); return row; } static class UserHolder { TextView textName; TextView textAddress; TextView textLocation; Button btnEdit; Button btnDelete; } }

Hola, mira aquí ...

Tengo la misma respuesta aquí en mi blog ...