【问题标题】:How to update sqlite database on click on listview item如何在单击 listview 项目时更新 sqlite 数据库
【发布时间】:2017-05-19 10:04:36
【问题描述】:

我有两个活动。在第一个活动中,我有一个列表视图,在第二个活动中,我有两个 editText,我通过 edittext 将数据保存在 sqlite 中并在列表视图中显示它们我已经完成了这些事情,现在我想要当我点击列表视图项目时,一个活动将打开edittext 包含以前的数据,所以我可以编辑它并更新 sqlite

Main.java

public class MainActivity extends AppCompatActivity {
List<FileName> filenames;
DBhelper dBhelper;
SQLiteDatabase sqLiteDatabase;
ListViewAdapter listViewAdapter;
ListView listView;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.main_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_add:
            Intent intent = new Intent(MainActivity.this, Note.class);
            startActivity(intent);
            return true;
        case R.id.action_credits:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (ListView)findViewById(R.id.lv_filename);
    dBhelper = new DBhelper(getApplicationContext());
    sqLiteDatabase =dBhelper.getReadableDatabase();
    filenames = dBhelper.getItemFromDatabase(sqLiteDatabase);
    if (filenames != null) {
        listViewAdapter = new ListViewAdapter(getApplicationContext(), R.layout.listview_item, filenames);
        listView.setAdapter(listViewAdapter);
    }
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        }
    });
}

 }

Note.java

public class Note extends AppCompatActivity {
EditText editText;
EditText editText2;
DBhelper dBhelper;
SQLiteDatabase sqLiteDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.note);
    editText = (EditText)findViewById(R.id.et_title);
    editText2 = (EditText)findViewById(R.id.et_note);


}


public void SaveNote()
{
    dBhelper = new DBhelper(this);
    sqLiteDatabase= dBhelper.getWritableDatabase();
    dBhelper.store(editText.getText().toString(),editText2.getText().toString(),sqLiteDatabase);

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_note, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.action_save:
            SaveNote();
            Intent intent = new Intent(Note.this, MainActivity.class);
            startActivity(intent);
        default:
            return super.onOptionsItemSelected(item);
    }

}
}

DBhelper.java

public class DBhelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "MEMBERSDATA.DB";

DBhelper(Context context)
{
    super(context,DATABASE_NAME,null,DATABASE_VERSION);
}



@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL("CREATE TABLE "+Coloumn.NewInfo.TABLE_NAME+"("+ Coloumn.NewInfo.TITLE+" TEXT,"+ Coloumn.NewInfo.NOTE+" TEXT);");

}
public void store(String Title,String Note, SQLiteDatabase sqLiteDatabase2) {
    sqLiteDatabase2.execSQL("insert into " + Coloumn.NewInfo.TABLE_NAME + " (" + Coloumn.NewInfo.TITLE + ", " + Coloumn.NewInfo.NOTE+ ") values(?,?);", new String[]{Title,Note});

}
public List<FileName> getItemFromDatabase(SQLiteDatabase sqLiteDatabase) {
    List<FileName> result = new ArrayList<>();
    Cursor c = sqLiteDatabase.rawQuery("SELECT * FROM "+Coloumn.NewInfo.TABLE_NAME,null);
    while (c.moveToNext()) {
        result.add(
                new FileName(
                        c.getString(c.getColumnIndex("Name")),
                        c.getString(c.getColumnIndex("Note"))
                )
        );
    }
    c.close();
    return result;
}





@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

【问题讨论】:

  • 为什么要为此创建新活动?只需创建一个包含两个编辑文本的对话框,并通过将单击项目的数据附加到对话框编辑文本并更新对 db 的更改来向用户显示该对话框
  • 我不需要对话框,因为我正在创建一个简单的记事本应用程序
  • 嗯,这个想法应该是通过你的意图包传递点击笔记的 id。在onCreate(Bundle bun) 上,您应该从数据库中获取数据并将其设置为EditText - EditText.setText(String str)。最后,一旦你完成了编辑,你只需要用新的字符串调用更新。
  • 我如何传递 id ? @ShahanM
  • Intent intent = new Intent(getBaseContext(), YourEditActivity.class); intent.putExtra("NOTE_ID", noteId); startActivity(intent);

标签: android sqlite listview


【解决方案1】:

在您的 OnitemClickListener 中,从您的数据库中获取该项目的数据并将它们发送到您的第二个活动并设置这些值以编辑这样的文本

  String name = filenames.get(positiom).getName(); //get these values based on your FileName class
    String note = filenames.get(positiom).getNote();//get these values based on your FileName class
    Intent intent =  new Intent(MainActivity.this,Note.class);
    intent.putExtra("Name",name);
    intent.putExtra("Note",note);
    startActivity(intent);

并在您的 Note Activity oncreate 方法中设置这些值以编辑文本

  String name = getIntent().getStringExtra("Name");
    String note = getIntent().getStringExtra("Note");
     editText1.setText(name);
     editText2.setText(note);

【讨论】:

  • 您可以在 DBhelper 类中创建一个方法来更新数据库表中的特定记录
猜你喜欢
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2012-09-22
  • 2012-10-27
  • 2012-08-24
  • 2018-07-26
相关资源
最近更新 更多