나는 (TableLayout을 사용하여 보여지는) Sqlite 데이터베이스에서 사용자가 선택한 레코드의 ROWID를 취하고 편집을 위해 다른 레코드 (DataEdit)에 연관된 레코드를 표시하는 응용 프로그램을 작성하고 있습니다. 이 기능은 처음으로 테이블 행을 선택한 후 DataEdit을 열 때 유용합니다. 그러나 테이블 탭으로 돌아가서 다른 레코드를 선택한 다음 DataEdit 탭으로 돌아 가면 선택한 행이 표시되지 않습니다. 가장 흥미롭게도 "selectedTableRecordView (v)"가 실행되고 토스트 메시지 (아래 코드 참조)를 통해 원하는 ROWID가 표시됩니다. 이 기능을 DataEdit 탭의 단추에 매핑 한 다음이 두 번째 반복 후에이 기능을 누르면 올바른 레코드가이 탭의 필드를 채 웁니다. 이게 뭐야? 나는 cursor.close()와 database.close()를 릴리프없이 시도했다. 문제가 무엇인지에 대한 생각? TIA안드로이드 조각, onViewCreated에서 호출 된 함수 : setText aspect는 날아 가지 않으며, 커서와 rawQuery는 ... 왜 그럴까요?
selectedTableRecord (V) 인 상태public class DataEdit extends Fragment implements OnClickListener {
SQLiteDatabase d, db;
Cursor queryAll;
EditText edRowid, edSpecies, edArea, edSampler, edCount;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//String szSelectedRow=DataTable.szSelectedRow;
View v = inflater.inflate(R.layout.dataedit, container, false);
return v;
}
public void onViewCreated(View v, Bundle savedInstanceState) {
super.onViewCreated(v, savedInstanceState);
DBAdapter msdb= new DBAdapter(getActivity().getApplicationContext(),"adfg", null);
db=msdb.getWritableDatabase();
//Button listeners on this fragment
Button btnSaveRecord = (Button)v.findViewById(R.id.btnSaveRecordxml);
btnSaveRecord.setOnClickListener(this);
Button btnUpdateRecord = (Button)v.findViewById(R.id.btnUpdateRecordxml);
btnUpdateRecord.setOnClickListener(this);
Button btnDeleteRecord = (Button)v.findViewById(R.id.btnDeleteRecordxml);
btnDeleteRecord.setOnClickListener(this);
Button btnResetForm = (Button)v.findViewById(R.id.btnResetFormxml);
btnResetForm.setOnClickListener(this);
Button btnFirstRecord = (Button)v.findViewById(R.id.btnFirstRecordxml);
btnFirstRecord.setOnClickListener(this);
Button btnPreviousRecord = (Button)v.findViewById(R.id.btnPreviousRecordxml);
btnPreviousRecord.setOnClickListener(this);
Button btnNextRecord = (Button)v.findViewById(R.id.btnNextRecordxml);
btnNextRecord.setOnClickListener(this);
Button btnLastRecord = (Button)v.findViewById(R.id.btnLastRecordxml);
btnLastRecord.setOnClickListener(this);
edRowid=(EditText)v.findViewById(R.id.edRowidxml);
edSpecies=(EditText)v.findViewById(R.id.edSpeciesxml);
edArea=(EditText)v.findViewById(R.id.edAreaxml);
edSampler=(EditText)v.findViewById(R.id.edSamplerxml);
edCount=(EditText)v.findViewById(R.id.edCountxml);
selectedTableRecord(v);
}
,
public void selectedTableRecord(View v){
Cursor c = db.rawQuery("SELECT * FROM surveyDB WHERE _id ="+DataTable.szSelectedRow,null);
c.moveToFirst();
edRowid.setText(c.getString(0));
edSpecies.setText(c.getString(1));
edArea.setText(c.getString(2));
edSampler.setText(c.getString(3));
edCount.setText(c.getString(4));
Toast.makeText(getActivity().getApplicationContext(), "Target rowid from within selectedTableRecord is"+DataTable.szSelectedRow+".", Toast.LENGTH_LONG).show();
}
selectedTableRecord의 Toast 문자열을 (c.getString (0))에서 (c.getString (4))까지 확장하면 올바른 ROWID의 모든 적절한 값이 전달됩니다 ... 문제가 해결되었습니다. 그런 다음 editText 필드 (edRowid, edSpecies 등)를 채우지 않습니다. – portsample