2017-01-10 63 views
0

我被困了幾天,不幸的是不知道如何解決它。 我有DetailScreen.java顯示數據從MainScreen(recyclerview的列表之一)。Put ID自動增量傳遞後2 ScreenActivity SQLite

  1. 我想這個代碼,但沒有效果,當我試圖改變使用 COLUMN_NOMOR在我更新功能,我可以改變時改變nomor名字,但 收到錯誤。我想,它有權在我的更新函數中使用 COLUMN_ID,因爲id是我的PK-AI。那麼是否因爲我沒有在我的DetailScreen中調用COLUMN_ID而導致 ?但是我怎樣在我的UpdateScreen中在我的DetailsS​​creen中調用我的 ID?

  2. 如果數據成功更新,屏幕將自動再次進入DetailScreen,但仍顯示舊數據。我必須先到MainActivity才能獲取新數據。我應該修改哪些代碼?在我DBHandler.java

這裏我更新功能

public int updateDataSiswa(Siswa siswa) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(COLUMN_NOMOR, siswa.getNomor()); 
    values.put(COLUMN_NAMA, siswa.getNama()); 

    return db.update(TABLE_SISWA, values, COLUMN_ID + " = ?", 
      new String[]{String.valueOf(siswa.getId())}); 
} 

這裏DetailScreen.java

public class DetailScreen extends AppCompatActivity { 
     private TextView txt_resultnomor, txt_resultnama; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.screen_details); 

     //put data 
     Intent i = getIntent(); 
     final String id = i.getExtras().getString("id"); 
     final String nomor = i.getExtras().getString("nomor"); 
     final String nama = i.getExtras().getString("nama"); 

     //inisialisasi 
     txt_resultnomor = (TextView) findViewById(R.id.txt_resultnomor); 
     txt_resultnama = (TextView) findViewById(R.id.txt_resultnama); 

     //set 
     txt_resultnomor.setText(nomor); 
     txt_resultnama.setText(nama); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_detail, menu); 
     return true; 
    } 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.action_edit) { 
      Intent in = new Intent(this, UpdateScreen.class); 
      in.putExtra("nomor", txt_resultnomor.getText().toString()); 
      in.putExtra("nama", txt_resultnama.getText().toString()); 
      startActivity(in); 
     } 
     if (id == R.id.action_delete) { 
      return true; 
     } 
     if (id == R.id.action_settings) { 
      // Intent i = new Intent(this, About.class); 
      //startActivity(i); 
     } 

     return super.onOptionsItemSelected(item); 
    } 



} 

然後在這裏我UpdateScreen.java

public class UpdateScreen extends AppCompatActivity { 

    private EditText et_nomor; 
    private EditText et_nama; 

    private Button button_updatedata; 

    private DBHandler dbHandler; 
    private SiswaAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_update_screen); 

     dbHandler = new DBHandler(this); 
     initComponents(); 
    } 
    private void initComponents(){ 
     et_nomor = (EditText) findViewById(R.id.et_nomor); 
     et_nama = (EditText) findViewById(R.id.et_nama); 

     //ambil data 
     Intent in=getIntent(); 
     final String id=in.getExtras().getString("id_siswa"); 
     final String nomor=in.getExtras().getString("nomor"); 
     final String nama=in.getExtras().getString("nama"); 

//set inisial 
     et_nomor.setText(nomor); 
     et_nama.setText(nama); 

     button_updatedata = (Button) findViewById(R.id.button_updatedata); 
     button_updatedata.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       validasiForm(); 
      } 
     }); 
    } 

    private void validasiForm() { 
     String form_nomor = et_nomor.getText().toString(); 
     String form_nama = et_nama.getText().toString(); 

     if (form_nomor.isEmpty()){ 
      et_nomor.setError("Nomor belum diisi"); 
      et_nomor.requestFocus(); 
     } 
     else if (form_nama.isEmpty()){ 
      et_nama.setError("Nama belum diisi"); 
      et_nama.requestFocus(); 
     } 
     else { 
      dbHandler.updateDataSiswa(new Siswa(form_nomor, form_nama)); 

      List<Siswa> siswaList = dbHandler.getSemuaSiswa(); 
      adapter = new SiswaAdapter(siswaList); 
      adapter.notifyDataSetChanged(); 
      Toast.makeText(UpdateScreen.this, "Berhasil Memperbarui Data Siswa", Toast.LENGTH_SHORT).show(); 
      MainSiswaActivity.mma.refresh(); 
      finish(); 
     } 
    } 
} 

我希望我講清楚,請幫助我。謝謝。

回答

0

你打電話給你給出的更新方法public int updateDataSiswa(Siswa siswa) ..?也基於你提供的...你的notifyDataSetChanged()適配器只是試圖更新RecyclerView .. 的列表視圖,但它不明白底層數據已經改變了它..你需要爲你的數據庫處理程序創建一個方法在這裏你可以獲取新records..and的名單,然後用這個方法來更新它的適配器,然後設置新的適配器到您的ListView在validasiForm()方法.. 請這對於更多的細節... Android ListView not refreshing after notifyDataSetChanged

+0

對不起,我編輯了我的代碼。我在UpdateScreen中調用'updateDataSiswa'。你能不能帶我先修理我的更新代碼,請問?我犯了這個錯誤:(@saurabh – Riris