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.

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(""); } } 

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