MatrixCursorに基づくListViewで、キーボードの最小化と方向の変更の値をリセットするのに問題があります。
マトリックスカーソルは、SQLデータベースからのデータで埋められます。これは、元のデータベース列をリストビューの行にしたいためです。
public void fillList(boolean rewrite, int rewrite pos, int) {
myCols = getColArray();
SQLiteDatabase myDB = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.OPEN_READONLY);
myCursor = myDB.query("Scoring", statCols, null, null, null, null, null);
String[] menuCols = new String[] { "_id","Item","Value"};
int []to = new int[]{R.id.listitem, R.id.listitem_value};
mc = new MatrixCursor(menuCols);
for (int i = 0; i < (mChoices.size()); i++) {
statCursor.moveToPosition(draftId);
String item = mChoices.get(i);
String valueString = "";
int valueCol = statCursor.getColumnIndex(item);
int value = statCursor.getInt(valueCol);
valueString = (String.valueOf(value));
mc.addRow(new Object[] {
i,
item,
valueString
});
}
このfillList()メソッドは私のonCreateで呼び出されます。次に、このカーソルを使用して、SimpleCursorAdapterを拡張することによりListViewにデータを入力します。断片化の私の目標は、ユーザーがリスト項目の1つをクリックして、EditText行のあるダイアログを表示できるようにすることです。
@Override
public void onListItemClick(ListView l, final View v, int position, long id) {
final TextView valueL = (TextView) v.findViewById(R.id.listitem_value);
String valueString = (String) valueL.getText();
int value = 100;
try {
value = Integer.parseInt(valueString);
} catch(NumberFormatException nfe) {
}
//Create dialog layout
View view = getActivity().getLayoutInflater().inflate(R.layout.numberpick_popup, null);
final EditText mInputText = (EditText) view.findViewById(R.id.myText);
//Create Dialog
AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
builder.setTitle(title);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
valueL.setText(mInputText.getText().toString());
return;
}
});
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
builder.setView (view);
final AlertDialog dialog = builder.create ();
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.show();
}
私が抱えている問題は、キーボードの非表示または向きの変更でフラグメントレイアウトが再生成され、fillDataが呼び出され、リストで更新した値が上書きされることです。これは、最初にキーボードを最小化せずにダイアログで[OK]を選択した場合、または向きを変更した場合に発生します。
私の考えでは、ダイアログから新しいデータが入力されたときに、MatrixCursorの値を上書きする方法があるはずです。ただし、これが可能かどうか、またはカーソルが状態の変化に耐えられるかどうかはわかりません。
どんな助けでも大歓迎です。