Also erstelle ich eine einfache Kontakte-App und bleibe dabei, die aktualisierte Zeile in einer Textansicht anzuzeigen. Ich habe einen Kommentar in der Methode "openUpdateDialog" gemacht, da es das Problem gibt, mit dem ich Hilfe brauche. Ich hoffe, dass mein Code einfach zu verstehen ist und danke für die Hilfe Jungs.Wie wird die aktualisierte Zeile in einer Textansicht angezeigt?
MainActivity.java:
public class MainActivity extends AppCompatActivity {
DatabaseHandler handler;
Context context = this;
ListView listView;
String textFromEtNameAdd;
String textFromEtPhoneAdd;
String textFromListViewName;
String textFromListViewPhone;
String textFromListViewID;
Contact singleContact;
int idAsIntegerFromListview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
listView = (ListView) findViewById(R.id.listview);
if (listView != null) {
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tvNameFromListView = (TextView) findViewById(R.id.nameID);
TextView tvPhoneFromListView = (TextView) findViewById(R.id.phoneID);
TextView tvIDFromListView = (TextView) findViewById(R.id.rowID);
textFromListViewName = tvNameFromListView.getText().toString();
textFromListViewPhone = tvPhoneFromListView.getText().toString();
textFromListViewID = tvIDFromListView.getText().toString();
idAsIntegerFromListview = Integer.parseInt(textFromListViewID);
singleContact = handler.getContact(id);
openUpdateDialog();
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(final AdapterView<?> parent, View view, final int position, final long id) {
PopupMenu popup = new PopupMenu(context, view);
popup.getMenuInflater().inflate(R.menu.menu_delete_popup, popup.getMenu());
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.deleteItemID:
Contact contact = new Contact(id);
handler.deleteContact(contact);
printDatabase();
break;
}
return true;
}
});
return true;
}
});
}
handler = new DatabaseHandler(this);
printDatabase();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.addContactID) {
openAddDialog();
}
return super.onOptionsItemSelected(item);
}
public void printDatabase() {
Cursor c = handler.getAllContacts();
String[] fromColumns = {handler.KEY_NAME, handler.KEY_ID, handler.KEY_PH_NO};
int[] toViews = {R.id.nameID, R.id.rowID, R.id.phoneID};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.my_custom_listview, c, fromColumns, toViews, 0);
listView.setAdapter(adapter);
}
public void openAddDialog() {
android.app.AlertDialog.Builder makeDialog = new android.app.AlertDialog.Builder(this);
LayoutInflater li = getLayoutInflater();
View viewAdd = li.inflate(R.layout.contacts_add_dialog, null);
makeDialog.setView(viewAdd);
final EditText etNameAdd = (EditText) viewAdd.findViewById(R.id.etNameID);
final EditText etPhoneAdd = (EditText) viewAdd.findViewById(R.id.etPhoneID);
makeDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
textFromEtNameAdd = etNameAdd.getText().toString();
textFromEtPhoneAdd = etPhoneAdd.getText().toString();
Contact contact = new Contact(textFromEtNameAdd, textFromEtPhoneAdd);
handler.addContact(contact);
printDatabase();
}
});
makeDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
android.app.AlertDialog ad = makeDialog.create();
ad.show();
}
public void openUpdateDialog() {
android.app.AlertDialog.Builder makeDialog = new android.app.AlertDialog.Builder(this);
LayoutInflater li = getLayoutInflater();
View viewUpdate = li.inflate(R.layout.contacts_add_dialog, null);
makeDialog.setView(viewUpdate);
final EditText etNameUpdate = (EditText) viewUpdate.findViewById(R.id.etNameID);
final EditText etPhoneUpdate = (EditText) viewUpdate.findViewById(R.id.etPhoneID);
final String singleContactName = singleContact.get_name();
final String singleContactPhone = singleContact.get_phone_number();
etNameUpdate.setText(singleContactName);
etPhoneUpdate.setText(singleContactPhone);
makeDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//name and phone goes in the parenthesis but its storing the old value :/
Contact contact = new Contact();
handler.updateContact(contact);
printDatabase();
}
});
makeDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
android.app.AlertDialog ad = makeDialog.create();
ad.show();
}
}
Contact.java:
public class Contact {
long _id;
String _name;
String _phone_number;
public Contact() {
}
public Contact(long _id) {
this._id = _id;
}
public Contact(String _name, String _phone_number) {
this._name = _name;
this._phone_number = _phone_number;
}
public Contact(long _id, String _name, String _phone_number) {
this._id = _id;
this._name = _name;
this._phone_number = _phone_number;
}
public long get_id() {
return _id;
}
public void set_id(long _id) {
this._id = _id;
}
public String get_name() {
return _name;
}
public void set_name(String _name) {
this._name = _name;
}
public String get_phone_number() {
return _phone_number;
}
public void set_phone_number(String _phone_number) {
this._phone_number = _phone_number;
}
@Override
public String toString() {
return _name;
}
}
DatabaseHandler.java:
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "contactsManager";
private static final String TABLE_CONTACTS = "contacts";
public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_PH_NO = "phone_number";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_PH_NO + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
onCreate(db);
}
void addContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.get_name());
values.put(KEY_PH_NO, contact.get_phone_number());
db.insert(TABLE_CONTACTS, null, values);
db.close();
}
public Contact getContact(long id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONTACTS, new String[]{KEY_ID,
KEY_NAME, KEY_PH_NO}, KEY_ID + "=?",
new String[]{String.valueOf(id)}, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
return contact;
}
public Cursor getAllContacts() {
List<Contact> contactList = new ArrayList<Contact>();
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
contact.set_id(Integer.parseInt(cursor.getString(0)));
contact.set_name(cursor.getString(1));
contact.set_phone_number(cursor.getString(2));
contactList.add(contact);
} while (cursor.moveToNext());
}
return cursor;
}
public int updateContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.get_name());
values.put(KEY_PH_NO, contact.get_phone_number());
return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
new String[]{String.valueOf(contact.get_id())});
}
public void deleteContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[]{String.valueOf(contact.get_id())});
db.close();
}
}
Was ist der Fehler, bekommen Sie genau ... post logcat hier –
fügen Sie einfach diese adapter.notifyOnDataSetChanged() unter listview.setAdapter() -Methode. Möge das dir helfen. –
Ich bekomme keine Fehler, es zeigt nur nicht die aktualisierte Zeile. es zeigt immer den alten Wert an. Beispiel: Ich möchte einen neuen Kontakt hinzufügen und den Namen "myname" eingeben und für die Nummer: "1", dann speichert es und dann klicke ich auf den Listeneintrag, um ihn zu bearbeiten, weil mir der Name nicht gefällt und ich will ändere es in: "myname2", aber wenn ich "myname2" eintippe, wird es als "myname" gespeichert. – Nenco