0
我在擴展DialogFragment的類中使用下面的代碼。 在添加按鈕之前,我將光標移動到某個位置(請參閱setDataFromCursor())。奇怪的是,嘗試再次在正按鈕的OnClickListener中獲取位置時位置已更改。 我添加了一些證明這一點的日誌輸出。有人知道爲什麼會發生這種情況嗎?DialogFragment OnClickListener奇怪的遊標行爲
感謝您的幫助!
編輯:在調試器中它也是可見的。我向前走了幾步,光標位置改變了,沒有調用moveToPosition。
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Log.v(TAG, "onCreateDialog");
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
view = inflater.inflate(R.layout.query_tab_dialog_add_operation,
null);
name = (TextView) view.findViewById(R.id.editTextOPName);
cimclass = (TextView) view.findViewById(R.id.editTextCIMclass);
setDataFromCursor();
builder.setView(view)
.setTitle(
R.string.querytabfragment_dialog_editOperation_title)
.setPositiveButton(R.string.apply,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
nameStr = name.getText().toString();
cimclassStr = cimclass.getText().toString();
Log.d(TAG,
"cursor position: "
+ cursor.getPosition());
int id = cursor.getInt(0);
Log.d(TAG, "cursor on item: " + id);
// update affected row
queryDBHelper.editCIMQuery(id, nameStr,
cimclassStr);
Log.d(TAG, "query edited. id: " + id
+ " name: " + nameStr
+ " cimclass: " + cimclassStr);
cursor.requery();
}
})
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
EditOperationDialogFragment.this
.getDialog().cancel();
}
});
return builder.create();
}
private void setDataFromCursor() {
cursor.moveToPosition(cursorPosition);
name.setText(cursor.getString(1));
cimclass.setText(cursor.getString(2));
}
你說得對。遊標通過適配器綁定到gridView。所以我會再次使用moveToPosition()。謝謝。 – AndyB
或者,也許有更好的方法來操縱上下文菜單下的項目,而不是將光標移動到項目在列表/ gridview中的位置? – AndyB
看起來你只需要id列,你可以在'setDataFromCursor()'裏面保存'cursor.getInt(0)'作爲一個字段變量,那麼不用擔心Cursor的位置。 – Sam