diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5876902..b31c3ff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,11 +32,13 @@ </activity> <activity android:name=".ElementActivity" - android:label="@string/title_activity_element" > + android:label="@string/title_activity_element" + android:windowSoftInputMode="adjustPan"> </activity> <activity android:name=".SQLActivity" - android:label="@string/title_activity_sql"> + android:label="@string/title_activity_sql" + android:windowSoftInputMode="adjustResize"> </activity> </application> diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/ElementArrayAdapter.java b/app/src/main/java/info/nerull7/mysqlbrowser/ElementArrayAdapter.java index 9004c95..adc23ba 100644 --- a/app/src/main/java/info/nerull7/mysqlbrowser/ElementArrayAdapter.java +++ b/app/src/main/java/info/nerull7/mysqlbrowser/ElementArrayAdapter.java @@ -1,13 +1,14 @@ package info.nerull7.mysqlbrowser; import android.content.Context; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; -import android.widget.EditText; import android.widget.TextView; +import java.util.ArrayList; import java.util.List; /** @@ -21,33 +22,52 @@ public class ElementArrayAdapter extends ArrayAdapter<String> { public ElementArrayAdapter(Context context, int resource, List<String> fields) { super(context, resource, fields); - this.context = context; - this.fields = fields; - layout = resource; - values = null; + init(context, resource, fields); + values = new ArrayList<String>(); + for(String field: fields){ + values.add(""); + } } public ElementArrayAdapter(Context context, int resource, List<String> fields, List<String> values) { - this(context, resource, fields); - this.values = values; + super(context, resource, fields); + init(context, resource, fields); + this.values = new ArrayList<String>(); + this.values.addAll(values); // Copy + } + + private void init(Context context, int resource, List<String> fields){ + this.context = context; + this.fields = fields; + layout = resource; } @Override - public View getView(int position, View convertView, ViewGroup parent) { + public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View rowView = layoutInflater.inflate(layout, parent, false); + final View rowView = layoutInflater.inflate(layout, parent, false); TextView textView = (TextView) rowView.findViewById(R.id.textFieldName); textView.setText(fields.get(position)); - if(values != null){ - TextView textFieldName = (TextView) rowView.findViewById(R.id.editFieldValue); - textFieldName.setText(values.get(position)); - } - + TextView textFieldName = (TextView) rowView.findViewById(R.id.editFieldValue); + textFieldName.setText(values.get(position)); + textFieldName.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (!hasFocus) { + String tmp = String.valueOf(((TextView) v).getText()); + values.set(position, tmp); + } + } + }); return rowView; } public List<String> getFieldArray(){ return fields; } + + public List<String> getValues() { + return values; + } } diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java b/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java index a26c459..6b84366 100644 --- a/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java +++ b/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java @@ -2,17 +2,22 @@ package info.nerull7.mysqlbrowser; import android.app.AlertDialog; import android.app.Fragment; +import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.AbsListView; import android.widget.EditText; import android.widget.ListView; import android.widget.ProgressBar; +import android.widget.RelativeLayout; import java.util.ArrayList; import java.util.List; @@ -50,6 +55,21 @@ public class ElementFragment extends Fragment implements AsyncDatabaseConnector. progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar); listView = (ListView) rootView.findViewById(R.id.listView); + listView.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + if(scrollState==SCROLL_STATE_TOUCH_SCROLL) { + listView.requestFocus(); + InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(listView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + } + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + } + }); + listView.setItemsCanFocus(true); initArguments(); postExecute = POST_EXECUTE_NONE; @@ -64,9 +84,9 @@ public class ElementFragment extends Fragment implements AsyncDatabaseConnector. List<String> fields = listAdapter.getFieldArray(); Static.asyncDatabaseConnector.setStringReturnListener(this); if(getArguments().getBoolean(EDIT_ELEMENT)) - Static.asyncDatabaseConnector.updateElement(tableName, fields, values, getNewValues()); + Static.asyncDatabaseConnector.updateElement(tableName, fields, values, listAdapter.getValues()); else - Static.asyncDatabaseConnector.addNewElement(tableName, fields, getNewValues()); + Static.asyncDatabaseConnector.addNewElement(tableName, fields, listAdapter.getValues()); } private void actionRemove(){ @@ -137,16 +157,6 @@ public class ElementFragment extends Fragment implements AsyncDatabaseConnector. } - private List<String> getNewValues(){ - List<String> newValues = new ArrayList<String>(); - - for(int i=0; i<listView.getChildCount();i++){ - EditText editText = (EditText) listView.getChildAt(i).findViewById(R.id.editFieldValue); - newValues.add(String.valueOf(editText.getText())); - } - return newValues; - } - @Override public void onStringReturn(String data) { message = data; diff --git a/app/src/main/res/layout/fragment_element.xml b/app/src/main/res/layout/fragment_element.xml index 3e9e223..c57f312 100644 --- a/app/src/main/res/layout/fragment_element.xml +++ b/app/src/main/res/layout/fragment_element.xml @@ -18,6 +18,7 @@ android:id="@+id/listView" android:layout_below="@+id/progressBar" android:layout_alignParentLeft="true" - android:layout_alignParentStart="true" /> + android:layout_alignParentStart="true" + android:descendantFocusability="afterDescendants"/> </RelativeLayout> \ No newline at end of file