EditText in listview losing control - android

I have added two textview(id, name), two edittext and two buttons(edit,save) in every row of listview, When edit button is clicked both edittext appears in that row(visibility is set to gone in XML) now all I want to do is allow user to add some contents in edittext and on pressing save button those contents will be reflected in textview and edittext will be disappeared again.
On edit buttons click view two edittext are appearing as expected but as soon as I type in any of the edittext they are getting refreshed. In debug mode I have found out that as soon as I am typing in Edittext getView() method called again & again and that's the reason behind refresh.
I have implemented empty onclicklistner on edittext so that when it get touched and typed it will not call getView but thats not working and I know that's a stupid attempt to solve problem.
Please tell what to do so that when I click or type in edittext it will not call getView().

You have to off focus from xml of edittext and button

Related

Kotlin recyclerView nextFocusDown

I need to make nextFocusDown on items in recyclerView. Every item has the same id, but to make nextFocusDown I need to have specific id. How shoudl I do this in recycerView to make focus on next edittext in list?
You can put focus on your edit text programmatically. Get the event when the user presses enter button or some button that tells you the user is done editing the first edit text. Then you can programmatically put focus on next item in recyclerview using following code:
edittext.setFocusableInTouchMode(true);
edittext.requestFocus();

Android Focus issue between EditText and CheckBox

I have an EditText field and a CheckBox. The behavior I am looking for is 'one or the other should be valid'. (1) So if there's text in the EditText and if the user clicks the CheckBox, the EditText field should automatically be set to "". My code is if CheckBox.isChecked() EditText.setText(""), and this works as expected.
(2) Likewise, if the CheckBox is checked and if the user starts entering text in the EditText, the CheckBox needs to be unchecked. My code is on EditText..afterTextChanged listener, if CheckBox.isChecked() CheckBox.toggle(). This sort of seems to happen, but the EditText field doesn't let go of focus. So the next time, I try to click the CheckBox (#1), the EditText receives focus first even though I clicked the CheckBox, and then it clears the CheckBox, so I am never able to check the CheckBox, because the EditText keeps receiving focus and keeps unchecking the CheckBox.
Is there anyway I could make this happen? Please let me know. Thanks.

Which is better way to implement edit - listview with edittext or table layout with edittext

Need to implement edit in runtime. Which one is the best way to achieve it.
Edittext in Listview or dynamic table layout(inflating row xml) with edittext
Update:
My listview contains 7-8 view(Text view) in a list item. On click edit button using view switcher changed textviews to edit text. To get the entered value in edittext listening onfocuschanged. It brings very slow performance. Any better way to achieve it?
Update:
If my listview have 100 list items. Each item having 7-8 edittext. Need to listen all the edittext focuschange. My app hangs. What should i do?
EditText within ListView can cause you great grief down the lane given that views are recycled in listview.
Say you have tapped on the second row in a listview where all item rows contain a edittext and you have set adjustResize in your AndroidManifest.xml; after the soft keyboard pops up, the focus goes into the first view that can accept the focus which in this case will be the first edittext (row) of your listview. Yes, you can tap again on the desired edittext to regain focus. But it is an annoyance nevertheless. If you set adjustPan, then I have seen the the problem does not exist as such; if I recollect correctly, you cannot scroll down all the way to the end of your list. Again, another annoyance.
I'd suggest, you go with a ScrollView if the number of items in the list are less. I have been trying to solve this for the last couple of days - I ended up doing this - I replaced the edittext's with textview's in the listview; tapping on the textview would bring up a dialog fragment that contains the edittext.
Have you looked into the concept of a ViewHolder to keep a reference to the items of the listview? That should solve your multiple focus listener problems.

EditText calls onFocusChanged three times instead of once

I have to do a ListView that contains on each item an EditText. If the EditText receives focus, I have to display a dialog - the condition is strictly for when the EditText receives focus and not when is pressed because it can be selected even if it is not pressed...
To do this I use a focus listener on the EditText but the onFocusChanged gets called three times instead on only one when the user presses the EditText, this means the dialog gets called twice...
This is the sequence of the calls:
Has focus
Lost focus
Has focus
I don't have any other special handling of the ListView or EditText .. so it should be from the system somehow, maybe because I am using the EditText on the ListView which is a focusable View too..
Does anyone have any ideas why is this happening and how can I "fix" this?
Thank you in advance.

android where to put code that will execute when ListView is done displaying?

I am building an edit in place listView. That is, the user is looking at a list of TextView items. Then the user touches one, indicating he'd like to edit it. The selected item is now shown as an EditText, in the same ListView as the other TextView items.
After this, the soft keyboard is shown, but the EditText has actually lost focus because of all the redrawing. I've got a handle on the EditText in SimpleCursorAdapter.getView(). But, calling EditText.requestFocus() is futile unless I can be sure the EditText is there on the screen.
In which method of which class will I be able to execute something like, getListView().findItemById(n).requestFocus(); ?
Thank you very much.
You can execute
getInstrumentation().waitForIdleSync()
to wait for all UI events.

Categories

Resources