Android TextView Problema de enfoque en listview (sólo MarshMallow)
Este problema está en MarshMallow (sólo)
Estoy trabajando en una aplicación de chat usando textview en listview, cuando toco / longpress en el elemento de la textview, se centra y funciona bien en Android versión 4.2.2, pero en MarshMallow pierde el mismo enfoque de tiempo. He buscado durante dos días y aplicado todos los métodos que se sugirieron.
- Cómo combinar conjuntos de imágenes, cadenas y enteros, en un formato fácil de mantener
- Android.os.TransactionTooLargeException recuperar aplicaciones instaladas
- El niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
- No se puede crear servicio com.parse.PushService: java.lang.NullPointerException
- Editar texto dentro de la vista de desplazamiento no se puede desplazar
He encontrado solamente una solución para utilizar Recyclerview en vez de ListView, pero el requisito es hacer con ListView.
¿Puede alguien guiarme cómo hacerlo con ListView.
Por favor, no downvote si no entiende o cualquier error de mi lado, lo comento.
Aquí está mi código:
row_chat.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv_chat" style="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Add message" android:padding="@dimen/ten" android:background="@android:color/white" android:textIsSelectable="true" android:textSize="@dimen/size_chat" />
content_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.ramesh.myapplication.MainActivity" tools:showIn="@layout/activity_main"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="0dp" android:layout_above="@+id/ll" android:layout_weight="1" android:descendantFocusability="afterDescendants" android:dividerHeight="1dp" android:focusable="true" android:visibility="visible" /> <LinearLayout android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <EditText android:id="@+id/et_post" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:maxLines="2" /> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/add" /> </LinearLayout> </LinearLayout>
ChatAdapter.java
import android.content.Context; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.TextView; import android.widget.TextView; import com.ramesh.myapplication.R; import com.ramesh.myapplication.models.ModelChat; import java.util.ArrayList; import java.util.List; /** * Created by Ramesh Kumar on 3/9/2016. */ public class ChatAdapter extends BaseAdapter { ArrayList<ModelChat> list; protected Context context; int resourceID; public ChatAdapter(Context context, int resID, ArrayList<ModelChat> list) { this.context = context; this.resourceID = resID; this.list = list; } @Override public int getCount() { if (list == null || list.size() <= 0) return 0; return list.size(); } @Override public ModelChat getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(resourceID, null); viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.textView.setText(list.get(position).getmDescription()); viewHolder.textView.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { final int position = v.getId(); final TextView Caption = (TextView) v; Caption.requestFocus(); // myItems.get(position).caption = Caption.getText().toString(); } } }); viewHolder.textView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { final TextView Caption = (TextView) v; Caption.requestFocus(); return false; } }); return convertView; } public void addModel(ModelChat modelChat) { list.add(modelChat); notifyDataSetChanged(); } public void editModel(ModelChat modelChat, int position) { if (position < 0) return; // list.remove(position); // list.add(position, modelChat); list.get(position).setmDescription(modelChat.getmDescription()); notifyDataSetChanged(); } public class ViewHolder { public TextView textView; public ViewHolder(View convertView) { textView = (TextView) convertView.findViewById(R.id.tv_chat); } } }
MainActivity.java
public class MainActivity extends AppCompatActivity { ListView listView; ChatAdapter adapterChat; EditText etDesc; Button btnAdd; ArrayList<ModelChat> listChat; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); initViews(); applyFunctionalityListView(); btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addButtonClickFunctionality(etDesc.getText().toString()); } }); } private void initViews() { listView = (ListView) findViewById(R.id.lv); etDesc = (EditText) findViewById(R.id.et_post); btnAdd = (Button) findViewById(R.id.btn_add); } private void applyFunctionalityListView() { listChat = new ArrayList<>(); adapterChat = new ChatAdapter(this, R.layout.row_chat, listChat); listView.setAdapter(adapterChat); } private void addButtonClickFunctionality(String s) { if (s == null || s.replaceAll(" ", "").equals("")) { return; } ModelChat modelChat = new ModelChat(); modelChat.setmDescription(s); ((ChatAdapter) listView.getAdapter()).addModel(modelChat); etDesc.setText(""); } }
- Cómo inflar RelativeLayout de XML
- Lista de lecturas <Item> con retrofit de XML API
- Cambiar el color del texto del elemento de menú en el cajón de navegación
- Animación de diseños utilizando el atributo "animateLayoutChanges" en XML
- InflateException: Línea de archivo XML binario # 22: Error al inflar la clase <unknown>
- Android, envío de XML a través de HTTP POST (SOAP)
- ¿Cómo puedo crear un ListView con divisiones de línea punteadas / punteadas en Android?
- Disposición de teclado personalizada de Android dejando un margen de blanco en el lateral
- reproductor de vídeo android se bloquea reproduciendo archivos locales
- GridView scrollBar: comportamiento errático al agregar dinámicamente imágenes