Skip to content

Instantly share code, notes, and snippets.

@bluemyria
Last active March 12, 2018 08:48
Show Gist options
  • Save bluemyria/5066d03c66ab27b6197c6826f9fe5141 to your computer and use it in GitHub Desktop.
Save bluemyria/5066d03c66ab27b6197c6826f9fe5141 to your computer and use it in GitHub Desktop.
Android 015 - ListView Manipulation / Refresh
//////////////////////////////////////////////////////////////////////////////////////////////
// in der Activity
//////////////////////////////////////////////////////////////////////////////////////////////
public class WoerterListe4Activity extends AppCompatActivity {
ListView lstVokabel;
private Datenbankzugriff datenbankzugriff;
private MyListAdapter myLA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_woerter_liste4);
init();
}
private void init() {
// Wenn eine andere als die Main Activity DB zugriff braucht,
// einfach neu anfordern!
datenbankzugriff = new Datenbankzugriff(this);
myLA = new MyListAdapter(this, datenbankzugriff);
lstVokabel = findViewById(R.id.lstVokabel);
lstVokabel.setAdapter(myLA);
lstVokabel.setOnItemLongClickListener(new myOILCL());
}
private class myOILCL implements AdapterView.OnItemLongClickListener {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Log.v("XXXXX - onItemLongClick", String.format("position: %d,id: %d ",position,id));
myLA.deleteItem(position);
/* Keine bessere Lösung fürs Refreshen der ListView gefunden, als einen neuen
* MyListAdapter anzufordern
* Eventuell checken:
* https://stackoverflow.com/questions/38601316/passing-database-class-object-from-main-activity-to-another-activity
* https://stackoverflow.com/questions/2736389/how-to-pass-an-object-from-one-activity-to-another-on-android
*/
myLA = new MyListAdapter(WoerterListe4Activity.this, datenbankzugriff);
lstVokabel.setAdapter(myLA);
return true;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
// in ListAdapter
//////////////////////////////////////////////////////////////////////////////////////////////
class MyListAdapter implements ListAdapter {
private ArrayList<Wortpaar> eintraege;
private Context context;
private Datenbankzugriff datenbankzugriff;
public MyListAdapter(Context context, Datenbankzugriff datenbankzugriff) {
this.context = context;
eintraege = new ArrayList<Wortpaar>();
this.datenbankzugriff = datenbankzugriff;
eintraegeAusDBLesen();
}
public void eintraegeAusDBLesen() {
try {
eintraege.clear();
ArrayList<String> zeilen = new ArrayList<String>();
zeilen = datenbankzugriff.auslesen( "SELECT ID, English, Deutsch FROM Words;");
for (String zeile: zeilen) {
String[] parts = zeile.split(";");
eintraege.add(new Wortpaar(Integer.parseInt(parts[0].toString()),
parts[1].toString(), parts[2].toString()));
}
} catch (Exception ex) {
Toast t = Toast.makeText(context, ex.getMessage() +
"Aus der DB zu lesen ist nicht möglich", Toast.LENGTH_LONG );
t.show();
}
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int i) {
return true;
}
@Override
public void registerDataSetObserver(DataSetObserver dataSetObserver) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver dataSetObserver) {
}
@Override
public int getCount() {
return eintraege.size();
}
@Override
public Object getItem(int i) {
return eintraege.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.listitem, null);
TextView tvEng = v.findViewById(R.id.tvEng);
TextView tvDeu = v.findViewById(R.id.tvDeu);
Wortpaar wp = (Wortpaar) getItem(i);
tvEng.setText(wp.eng);
tvDeu.setText(wp.deu);
return v;
}
@Override
public int getItemViewType(int i) {
return 0;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean isEmpty() {
return getCount() == 0;
}
public void deleteItem(int positionInList) {
int dbIdToDelete;
dbIdToDelete = eintraege.get(positionInList).dbId;
datenbankzugriff.ausfuehren(String.format("DELETE FROM Words where ID=%d",dbIdToDelete));
eintraegeAusDBLesen();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment