2017-01-10 7 views
0

私は数日間立ち往生していますが、残念ながらそれを修正する方法はわかりません。 DetailScreen.java私はのMainScreen(recyclerviewのリストの1つ)のデータを表示しています。 パス2の後にIDオートインクリメントを入力してください。ScreenActivity SQLite

  1. が、私はこのコードを試みたが、効果がない、私は私の更新機能で使用 COLUMN_NOMORを変更しようとすると、私はnomorを変更する名前が、 取得中にエラーを変更することができます。 IDが自分のPK-AIであるため、更新機能に COLUMN_IDを使用する権利があると思います。だから かどうか私は私のDetailScreenでCOLUMN_IDを呼び出しませんでしたか?しかし、私ののIDは、自分の詳細画面で私のUpdateScreenでも呼び出すことができますか?

  2. データの更新が成功した場合、画面は自動的にDetailScreenに戻りますが、古いデータが表示されます。新しいデータを取得するには、まずMainActivityに行く必要がありました。どこでコードを修正すべきですか?

  3. ここ 私 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のリストビューを更新しようとしました。 しかし、基本データが変更されたことを理解していません。データベースハンドラのメソッドを作成する必要があります新しいレコードのリストを取得することができます。次に、このメソッドを使用してアダプタを更新し、新しいアダプタをvalidasiForm()メソッドのlistViewに設定します。Android ListView not refreshing after notifyDataSetChanged

+0

申し訳ありませんが、私は自分のコードを編集しました。私は私のUpdateScreenで 'updateDataSiswa'を呼び出します。私は最初に私の更新コード、plsを修正するために私を導くことができますか?どこで私は間違いをしますか:(@Saurabh – Riris

関連する問題