Centrarse en EditText en ListView cuando los descendientes de bloque (Android)

Tengo un ListView personalizado. Cada fila tiene un EditText, Buttons & TextView . Para hacer que los elementos de ListView sean accesibles, he mantenido android:descendantFocusability="blocksDescendants" para el diseño de filas. Si no onItemClick descendantFocusability , no puedo implementar una acción para onItemClick . Si mantengo descendantFocusability el EditText que está presente en mi fila no está ganando el foco. Quiero que el EditText y también debo poder hacer clic en cada fila para navegar a otra Activity . ¿Puede alguien por favor ayudarme en esto. Gracias a todos.

Edit: En el CustomAdapter para EditText, traté de mantener onTouchListener y también onClickListener donde me requestFocus pero que no parece funcionar.

Row.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/recentrowLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="@dimen/margin_left_5" android:clickable="true" tools:ignore="UseCompoundDrawables,HardcodedText,ContentDescription,UselessParent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/edit_text_bg" android:padding="@dimen/margin_left_5" > <RelativeLayout android:id="@+id/rl1" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/addSubscribe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" /> <TextView android:id="@+id/flikart_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="FLIKART" android:textColor="@color/gray" android:textSize="@dimen/medium_text_size" /> <ImageView android:id="@+id/addToFav" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" /> </RelativeLayout> <LinearLayout android:id="@+id/rl2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/rl1" android:layout_marginLeft="@dimen/margin_30" android:layout_marginRight="@dimen/margin_30" android:layout_marginTop="10dp" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/text_desciption" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:lines="2" android:text="20% off on Smart Phones and basic Handsets has upto 50% OFF only" android:textColor="@color/blue" /> <TextView android:id="@+id/text_desciption2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:lines="1" android:text="somethign something,......." android:textColor="@color/gray" /> <TextView android:id="@+id/couponTypeText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/margin_left_10" android:background="@drawable/button_bg" android:gravity="center" android:padding="@dimen/margin_left_10" android:text="STEAL THE DEAL" android:textColor="@color/white" android:textSize="@dimen/little_small_text_size" /> </LinearLayout> <RelativeLayout android:id="@+id/rl3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/rl2" android:layout_marginTop="@dimen/margin_left_10" > <TextView android:id="@+id/text_offer_expiry" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginRight="@dimen/margin_left_5" android:text="Ends 10 days" android:textColor="@color/red" android:textSize="16sp" /> <RelativeLayout android:id="@+id/rightLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" > <ImageView android:id="@+id/comment_image_total" android:layout_width="@dimen/dimenstion_25" android:layout_height="@dimen/dimenstion_20" android:background="@drawable/comments" /> <TextView android:id="@+id/text_comments" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@id/comment_image_total" android:text="100 Comments" android:textColor="@color/gray" android:textSize="16sp" /> </RelativeLayout> <RelativeLayout android:id="@+id/ll2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_toLeftOf="@id/rightLayout" android:layout_toRightOf="@id/text_offer_expiry" android:gravity="center_horizontal" > <ImageView android:id="@+id/like_image_total" android:layout_width="@dimen/dimenstion_25" android:layout_height="@dimen/dimenstion_25" android:background="@drawable/like" /> <TextView android:id="@+id/text_total_likes" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@id/like_image_total" android:text="999 Likes" android:textColor="@color/gray" android:textSize="16sp" /> </RelativeLayout> </RelativeLayout> <View android:id="@+id/view" android:layout_width="fill_parent" android:layout_height="4dp" android:layout_below="@id/rl3" android:layout_marginTop="@dimen/margin_5" android:background="@color/purple_clor" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="@dimen/title_bar_height" android:layout_below="@id/view" android:layout_centerVertical="true" android:layout_marginTop="@dimen/margin_5" > <RelativeLayout android:id="@+id/likesLayout" android:layout_width="@dimen/dimenstion_40" android:layout_height="@dimen/dimenstion_40" android:layout_centerVertical="true" android:background="@drawable/unratedbkg" > <Button android:id="@+id/likesBtn" android:layout_width="@dimen/dimenstion_30" android:layout_height="@dimen/dimenstion_30" android:layout_centerInParent="true" android:background="@drawable/unrated" /> </RelativeLayout> <RelativeLayout android:id="@+id/footermain" android:layout_width="fill_parent" android:layout_height="@dimen/dimenstion_40" android:layout_centerVertical="true" android:layout_toRightOf="@id/likesLayout" android:background="@color/white" > <RelativeLayout android:id="@+id/animLayout" android:layout_width="100dp" android:layout_height="@dimen/dimenstion_40" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/likesLayout" android:background="@drawable/ratingbkg" android:visibility="gone" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_margin="@dimen/margin_5" > <ImageView android:id="@+id/like_image" android:layout_width="@dimen/dimenstion_30" android:layout_height="@dimen/dimenstion_30" android:layout_centerInParent="true" android:background="@drawable/like" /> </RelativeLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_margin="@dimen/margin_5" > <ImageView android:id="@+id/dislike_image" android:layout_width="@dimen/dimenstion_30" android:layout_height="@dimen/dimenstion_30" android:layout_centerInParent="true" android:background="@drawable/dislike" /> </RelativeLayout> </RelativeLayout> <EditText android:id="@+id/add_comment" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:layout_toRightOf="@id/animLayout" android:focusable="false" android:focusableInTouchMode="false" android:hint="Add Comment" android:inputType="text" /> </RelativeLayout> </RelativeLayout> </RelativeLayout> </LinearLayout> 

5 Solutions collect form web for “Centrarse en EditText en ListView cuando los descendientes de bloque (Android)”

Por favor no utilice setOnItemClickListener para hacer clic en el artículo .. creo que debe utilizarse punto de vista de artículo haga clic en el método de adaptador

 convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "click item",Toast.LENGTH_LONG).show(); } }); 

Eliminar este elemento del diseño de elementos de lista principal

 android:descendantFocusability="blocksDescendants" 

Gracias y disfrutar de este código!

Intenta agregar esta línea a tu actividad en el archivo manifest.xml

 android:windowSoftInputMode="stateHidden|adjustResize|adjustPan" 
 you do like this: first set in your listview android:focusable="false"; 

Entonces usted quiere que se haga clic en la fila: para esto en su customAdapter u debe hacer esto

  v.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(context, "Hello world",2000).show(); } }); 

Funcionará. De forma predeterminada, los elementos deben tener ahora la opción de clic, cuando haces android: focusable = "false" en listview. No hay necesidad de utilizar -descendantFocusability en listview.

Main.xml

 <?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"> <ListView android:id="@+id/MyList" android:layout_height="fill_parent" android:layout_width="fill_parent" android:descendantFocusability="beforeDescendants"> </ListView> </LinearLayout> 

Item.xml

 <?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"> <EditText android:id="@+id/ItemCaption" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_marginLeft="2dip" android:singleLine="true"> </EditText> </LinearLayout> 

AndroidCustomListViewActivity

 public class AndroidCustomListViewActivity extends Activity { private ListView myList; private MyAdapter myAdapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myList = (ListView) findViewById(R.id.MyList); myList.setItemsCanFocus(true); myAdapter = new MyAdapter(); myList.setAdapter(myAdapter); } public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; public ArrayList myItems = new ArrayList(); public MyAdapter() { mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); for (int i = 0; i < 20; i++) { ListItem listItem = new ListItem(); listItem.caption = "Caption" + i; myItems.add(listItem); } notifyDataSetChanged(); } public int getCount() { return myItems.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.item, null); holder.caption = (EditText) convertView .findViewById(R.id.ItemCaption); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } //Fill EditText with the value you have in data source holder.caption.setText(myItems.get(position).caption); holder.caption.setId(position); //we need to update adapter once we finish with editing holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus){ final int position = v.getId(); final EditText Caption = (EditText) v; myItems.get(position).caption = Caption.getText().toString(); } } }); return convertView; } } class ViewHolder { EditText caption; } class ListItem { String caption; } } 

Main.xml

 <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:animationCache="false" android:scrollingCache="false" android:smoothScrollbar="true" > </ListView> 

Crear ArrayList agregar datos al arraylist.

 lv=(ListView)findViewById(R.id.listView1); lv.setItemsCanFocus(true); for(int i=0;i<30 data-blogger-escaped-br="" data-blogger-escaped-i=""> list.add(i); } 

1) cree el adaptador para el listview y ajuste la posición como etiqueta para el edittext.

2) Normalmente, al desplazarse la posición del ítem cambiará. Por lo tanto, usted tiene que obtener la etiqueta edittext y establecerlo en el id. Edittext de que se puede evitar el cambio de la posición del elemento.

 holder.caption = (EditText) convertView .findViewById(R.id.editText12); holder.caption.setTag(position); holder.caption.setText(list.get(position).toString()); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } int tag_position=(Integer) holder.caption.getTag(); holder.caption.setId(tag_position); 

Finalmente, agregue el observador de texto al edittext y guarde los cambios en la posición correcta en la lista.

 holder.caption.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { final int position2 = holder.caption.getId(); final EditText Caption = (EditText) holder.caption; if(Caption.getText().toString().length()>0){ list.set(position2,Integer.parseInt(Caption.getText().toString())); }else{ Toast.makeText(getApplicationContext(), "Please enter some value", Toast.LENGTH_SHORT).show(); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { } }); 

Consulte este enlace .. http://velmuruganandroidcoding.blogspot.in/2014/08/edittext-in-listview-android-example.html

  • OnFocusChange no siempre funciona
  • Cómo hacer que EditText no se enfoque al crear la actividad
  • Editado Android enfoque automático
  • No se puede administrar a requestFocus a Spinner
  • Los elementos secundarios ExpandableListView no obtienen el enfoque cuando se tocan
  • Android onfocuschange en xml
  • Calcula cuánto tráfico de red generan otras aplicaciones de Android
  • Android: ¿Para establecer un elemento como seleccionado cuando se abre ListView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.