1

I already read tons of similar questions, but I found no solution that fixed my problem, so please do not mark this as duplicate.

I have a ListFragment with a FrameLayout containing a ListView, populated through a custom ArrayListAdapter. Each row of the list has three elements:

Checkbox, EditText and ImageButton.

My problem is that when I tap on an EditText to change the string it contains the keyboard shows up, but the focus immediately goes away and I'm not able to write.

Please note that I already have added to my Activity in the manifest file

android:windowSoftInputMode="adjustResize"

even the

android:descendantFocusability="afterDescendants" android:descendantFocusability="beforeDescendants"

doesn't solve the problem.

Here is my XML code:

row_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/item_checkbox" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <EditText android:id="@+id/item_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="60px" android:text="Test text" android:singleLine="true" android:layout_toRightOf="@id/item_checkbox" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/item_important" android:layout_toStartOf="@+id/item_important" /> <ImageButton android:id="@+id/item_important" android:layout_width="20dip" android:layout_height="20dip" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:visibility="visible" android:layout_marginLeft="10dp" /> </RelativeLayout> 

fragment_list.xml

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="8dp" android:paddingRight="8dp" > <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 

It would be great if you could suggest me some resource where to understand how focusability works in this case.

Thank you


UPDATE

I found out the problem is created by the keyboard showing up: I guess the view recycling is the reason why the EditText loses focus.

2
  • Possible duplicate stackoverflow.com/questions/2679948/… Commented Jan 13, 2015 at 10:19
  • I already tried that solution, unfortunately is not solving the problem... Commented Jan 14, 2015 at 11:38

3 Answers 3

1

I solved my issue using the new RecyclerView class. It seems that was a problem of the ListView

Sign up to request clarification or add additional context in comments.

Comments

0

Try this code

row_item.xml

<?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="wrap_content" android:orientation="horizontal" > <CheckBox android:id="@+id/item_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:focusable="false"/> <EditText android:id="@+id/item_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/item_important" android:layout_toRightOf="@id/item_checkbox" android:layout_toStartOf="@+id/item_important" android:minHeight="60px" android:focusable="true" android:singleLine="true" /> <ImageButton android:id="@+id/item_important" android:layout_width="20dip" android:layout_height="20dip" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:visibility="visible" /> </RelativeLayout> 

fragment_list.xml

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="8dp" android:paddingRight="8dp" > <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="beforeDescendants"/> </FrameLayout> 

Activity Code

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_list); ArrayList<String> mArrayList = new ArrayList<String>(); /**mArrayList.add("Test"); mArrayList.add("Test"); mArrayList.add("Test"); mArrayList.add("Test");**/ CustomeAdapter adapter = new CustomeAdapter(this, mArrayList); ListView listView = (ListView) findViewById(android.R.id.list); listView.setItemsCanFocus(true); listView.setAdapter(adapter); } public class CustomeAdapter extends ArrayAdapter { ArrayList<String> mArrayList; @SuppressWarnings("unchecked") public CustomeAdapter(Context context, ArrayList<String> users) { super(context, R.layout.row_item, users); mArrayList = new ArrayList<String>(); mArrayList = users; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; // view lookup cache stored in tag if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_item, parent, false); viewHolder.mCheckBox = (CheckBox) convertView.findViewById(R.id.item_checkbox); viewHolder.mEditText = (EditText) convertView.findViewById(R.id.item_text); viewHolder.mImageView = (ImageView) convertView.findViewById(R.id.item_important); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.mEditText.setText(mArrayList.get(position)); return convertView; } // View lookup cache private class ViewHolder { CheckBox mCheckBox; EditText mEditText; ImageView mImageView; } } 

1 Comment

Thank you, I tryed your code on my mobile device with Android API 16 and it still has the same problem. Then I tested it on a virtual device with Android API 21 and it works. Do you know why?
0

Did you set android:focusable="true" and android:focusableInTouchMode="true" on your EditText?

Also the android:windowSoftInputMode="adjustPan" in your AndroiManifest file.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.