Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Sustitución de la fila ListView por otra presentación onClick

Tengo un ListView con sólo TextView. Quiero una implementación en la que si hago clic en una fila ListView, un edittext con un botón de reemplazo debe aparecer y lo que digite en ese edittext y haga clic en reemplazar, el listrow debe actualizar. Mi principal problema que me enfrento es inflar un diseño en la lista row.Can nadie me dicen cómo lograr esto?

public class ContextMenuActivity extends Activity { private ListView list; TextView tv; ArrayList<String> alistItems; int loopCount; CustomAdapter adapter; LayoutInflater inflater; TextView textView; EditText edtTextToReplace; RelativeLayout rl_inflate; View child; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contextmenulist); initComponents(); setActionListener(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("Options"); menu.add(0, v.getId(), 0, "Edit"); menu.add(0, v.getId(), 0, "Delete"); /* * MenuInflater inflater = getMenuInflater(); * inflater.inflate(R.menu.context_menu, menu); */ } private void initComponents() { inflater = ContextMenuActivity.this.getLayoutInflater(); list = (ListView) findViewById(R.id.contextmenu_lst_list); tv = (TextView) findViewById(R.id.listitem_txt_item); alistItems = new ArrayList<String>(); for (loopCount = 1; loopCount < 30; loopCount++) { alistItems.add("Item " + loopCount); } prepareView(); } private void prepareView() { adapter = new CustomAdapter(getApplicationContext(), R.layout.listitem, alistItems); list.setAdapter(adapter); registerForContextMenu(list); } private void setActionListener() { list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, final View view, final int arg2, long arg3) { System.out.println("alist is " + alistItems); textView = (TextView) view.findViewById(R.id.listitem_txt_item); rl_inflate = (RelativeLayout) view .findViewById(R.id.rl_inflate); child = getLayoutInflater().inflate(R.layout.clicklistitem, null); rl_inflate.addView(child); textView.setVisibility(View.GONE); rl_inflate.setVisibility(View.VISIBLE); Button my_btn = (Button) child .findViewById(R.id.clicklistitem_btn_replace); edtTextToReplace = (EditText) child .findViewById(R.id.clicklistitem_edt); my_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { textView.setText(edtTextToReplace.getText().toString()); alistItems.set(arg2, edtTextToReplace.getText() .toString()); rl_inflate.setVisibility(View.GONE); rl_inflate.removeViewInLayout(child); textView.setVisibility(View.VISIBLE); adapter.notifyDataSetChanged(); } }); } }); } public class CustomAdapter extends ArrayAdapter<String> { ArrayList<String> alistItems; int resource; public CustomAdapter(Context context, int resource, ArrayList<String> alistItems) { super(context, resource); this.alistItems = alistItems; this.resource = resource; } @Override public int getCount() { return alistItems.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder = new Holder(); if (convertView == null) { convertView = inflater .inflate(R.layout.listitem, parent, false); } holder.tvRow = (TextView) convertView .findViewById(R.id.listitem_txt_item); convertView.setTag(holder); holder = (Holder) convertView.getTag(); holder.tvRow.setText(alistItems.get(position)); return convertView; } } class Holder { TextView tvRow; } } 

2 Solutions collect form web for “Sustitución de la fila ListView por otra presentación onClick”

Usted puede lograr esto de dos maneras: –

  1. Primero está en la disposición de elementos de listview añadir EditText y un botón y ocultarlos. Ahora configure onItemClickListener de listview en el que ocultar textview y mostrar editext y reemplazar el botón.

  2. En segundo lugar es crear un nuevo diseño con el texto de edición y un botón y establecer onItemClickListener para listview y cuando se hace clic en la fila que fácilmente puede inflar ese diseño en el layout del elemento de su listview.

Segundo código de la solución: –

Inflate.xml

 <EditText android:id="@+id/enter_txt" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_replace" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

* List_view_item.xml *

 <TextView android:id="@+id/my_txt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ABCD" /> <RelativeLayout android:id="@+id/rl_inflate" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

Listview onItemClickListener

  listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView txt_view = (TextView)view.findViewById(R.id.my_txt); txt_view.setVisibility(View.GONE); RelativeLayout rl_inflate = (RelativeLayout)view.findViewById(R.id.rl_inflate); View child = getLayoutInflater().inflate(R.layout.inflate); rl_inflate.addView(child); Button my_btn = (Button)child.findViewById(R.id.btn_replace); EditText enter_txt = (EditText)child.findViewById(R.id.enter_txt); my_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { txt_view.setText(enter_txt.getText().toString()); txt_view.setVisibility(View.VISIBLE); } }); } }); 

Puede ir con cualquiera de las dos soluciones siguientes:

  1. Incluir un edittext y reemplazar el botón junto con el layout textview y que debe estar en estado oculto. Al hacer clic en el elemento de lista, cambie la visibilidad del texto de edición y el botón a visible y cambie el de textview a Gone. Al hacer clic en el botón de reemplazo, invierta el cambio de visibilidad.

  2. Al hacer clic en el elemento de la lista, muestre un cuadro de alerta con un botón edittext y reemplazar. Después de cambiar el contenido y hacer clic en el botón reemplazar, cambie el contenido de la vista de texto al valor cambiado.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.