2

나는 (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(); 
} 
+0

selectedTableRecord의 Toast 문자열을 (c.getString (0))에서 (c.getString (4))까지 확장하면 올바른 ROWID의 모든 적절한 값이 전달됩니다 ... 문제가 해결되었습니다. 그런 다음 editText 필드 (edRowid, edSpecies 등)를 채우지 않습니다. – portsample

답변

1

삽입 onResume() 및 재구성 onCreateView() 및 onViewCreated는 thusly 히 문제를 해결했다 :

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) {   
     View v = inflater.inflate(R.layout.dataedit, container, false); 
     return v;  
    } 
    @Override 
    public void onResume(){ 
     super.onResume(); 
     selectedTableRecord(); 
    } 
    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(); 
    } 
    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.btnSaveRecordxml: 
      saveRecord(v); 
      break; 
     /*omitted*/ 

     } 
    } 
    private void selectedTableRecord(){ 
     Cursor c = db.rawQuery("SELECT * FROM surveyDB WHERE _id ="+DataTable.szSelectedRow,null); 
     c.moveToFirst();////a record exists (table is not blank)      
     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)); 
    } 

문제 onViewCreated 또는 onResume 메서드없이 onCreateView 메서드에 모든 것을 쏟아 붓는 것과 관련이있었습니다. 이들을 추가하고 함수를 파싱하면이 상황이 적절히 해결됩니다.

관련 문제