From da10e82a7b9328b5ae071d0583fd97bdfbaa17be Mon Sep 17 00:00:00 2001 From: Kevin Wong Date: Mon, 9 Mar 2015 14:28:21 -0500 Subject: [PATCH] Cherry-pick of 246bfbd "Fixed EditText cell focus lose" from @syscoas Signed-off-by: ReDetection --- .../java/com/quemb/qmbform/FormManager.java | 6 ++-- .../quemb/qmbform/adapter/FormAdapter.java | 32 ++++++++++++++++--- .../qmbform/view/FormEditTextFieldCell.java | 4 +++ 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/lib/QMBForm/src/main/java/com/quemb/qmbform/FormManager.java b/lib/QMBForm/src/main/java/com/quemb/qmbform/FormManager.java index 1e11133..805c3ff 100755 --- a/lib/QMBForm/src/main/java/com/quemb/qmbform/FormManager.java +++ b/lib/QMBForm/src/main/java/com/quemb/qmbform/FormManager.java @@ -10,6 +10,8 @@ import com.quemb.qmbform.descriptor.SectionDescriptor; import com.quemb.qmbform.descriptor.Value; import com.quemb.qmbform.view.Cell; +import com.quemb.qmbform.view.FormEditTextFieldCell; +import com.quemb.qmbform.view.FormEditTextViewFieldCell; import android.app.Activity; import android.content.Context; @@ -42,7 +44,7 @@ public FormManager(){ } - public void setup(FormDescriptor formDescriptor, final ListView listView, Activity activity){ + public void setup(final FormDescriptor formDescriptor, final ListView listView, Activity activity){ Context context = activity; @@ -53,7 +55,7 @@ public void setup(FormDescriptor formDescriptor, final ListView listView, Activi final FormAdapter adapter = FormAdapter.newInstance(mFormDescriptor, context); listView.setAdapter(adapter); - listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); + //listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { diff --git a/lib/QMBForm/src/main/java/com/quemb/qmbform/adapter/FormAdapter.java b/lib/QMBForm/src/main/java/com/quemb/qmbform/adapter/FormAdapter.java index a33b0e9..e55f32a 100755 --- a/lib/QMBForm/src/main/java/com/quemb/qmbform/adapter/FormAdapter.java +++ b/lib/QMBForm/src/main/java/com/quemb/qmbform/adapter/FormAdapter.java @@ -6,6 +6,7 @@ import com.quemb.qmbform.descriptor.SectionDescriptor; import com.quemb.qmbform.CellViewFactory; import com.quemb.qmbform.view.Cell; +import com.quemb.qmbform.view.FormEditTextFieldCell; import android.content.Context; import android.view.View; @@ -23,17 +24,19 @@ public class FormAdapter extends BaseAdapter { private ArrayList mItems; private Context mContext; private Boolean mEnableSectionSeperator; + private int focusedEditTextRow = -1; public static FormAdapter newInstance(FormDescriptor formDescriptor, Context context){ FormAdapter formAdapter = new FormAdapter(); formAdapter.mFormDescriptor = formDescriptor; formAdapter.mContext = context; formAdapter.setEnableSectionSeperator(true); + formAdapter.setup(); + return formAdapter; } - @Override - public int getCount() { + public void setup() { mItems = new ArrayList(); int sectionCount = 1; for (SectionDescriptor sectionDescriptor : mFormDescriptor.getSections()){ @@ -49,7 +52,10 @@ public int getCount() { } sectionCount++; } - + } + + @Override + public int getCount() { return mItems.size(); } @@ -66,9 +72,25 @@ public long getItemId(int position) { @Override public View getView(int position, View convertView, ViewGroup parent) { + Cell cell = CellViewFactory.getInstance().createViewForFormItemDescriptor(mContext,getItem(position)); + if (cell instanceof FormEditTextFieldCell) { + processEditTextCell((FormEditTextFieldCell)cell, position); + } + return cell; + } - - return CellViewFactory.getInstance().createViewForFormItemDescriptor(mContext,getItem(position)); + private void processEditTextCell(FormEditTextFieldCell cell, final int row) { + if (row == focusedEditTextRow) { + cell.getEditView().requestFocus(); + } + cell.getEditView().setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) { + focusedEditTextRow = row; + } + } + }); } diff --git a/lib/QMBForm/src/main/java/com/quemb/qmbform/view/FormEditTextFieldCell.java b/lib/QMBForm/src/main/java/com/quemb/qmbform/view/FormEditTextFieldCell.java index 3235c80..a6c3fd0 100755 --- a/lib/QMBForm/src/main/java/com/quemb/qmbform/view/FormEditTextFieldCell.java +++ b/lib/QMBForm/src/main/java/com/quemb/qmbform/view/FormEditTextFieldCell.java @@ -98,4 +98,8 @@ public EditText getEditView() { return mEditView; } + public void focusEditText() { + mEditView.requestFocus(); + } + }