i've just starting to develop for android and I got a problem by deleting data from my sqLite Database and updating my RecyclerView properly.
When the user tap on of the rows, he gets a new Activity where he can delete the row via a button.
Here is the Code for my MainActivity
public class MainActivity extends ActionBarActivity implements OnItemClickListener {
private Toolbar toolbar;
private RecyclerView markList;
private MainMarkAdapter adapter;
private DataBase dataBase;
ActionButton actionButton;
View.OnClickListener actionButtonListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent addMarkIntent = new Intent(MainActivity.this, CreateMarkActivity.class);
//transfer Data to CreateMarkActivity
//addMarkIntent.putExtra("key", value);
MainActivity.this.startActivityForResult(addMarkIntent, 1);
}
};
View.OnClickListener showDetailListener = new View.OnClickListener() {
@Override
public void onClick (View v) {
String myString = "Zeige Details!";
Toast.makeText(MainActivity.this, myString, Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dataBase = new DataBase(MainActivity.this);
try {
dataBase.open();
} catch (Exception e) {
e.printStackTrace();
}
//set Toolbar
toolbar= (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
//set Font
TextView avgDescTV = (TextView) findViewById(R.id.main_AverageDescription);
avgDescTV.setTypeface(EasyFonts.robotoMedium(this));
TextView avgTV = (TextView) findViewById(R.id.main_Average);
avgTV.setTypeface(EasyFonts.robotoThin(this));
//set RecyclerView
markList = (RecyclerView) findViewById(R.id.main_markList);
adapter = new MainMarkAdapter(this, dataBase.getDataMark(), this);
/*
adapter.setOnItemClickListenerWithPosition(new OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(MainActivity.this, DetailMarkActivity.class);
//transfer Data to CreateMarkActivity
intent.putExtra("selectedRow", position);
MainActivity.this.startActivityForResult(intent, 2);
}
});
*/
markList.setAdapter(adapter);
markList.setLayoutManager(new LinearLayoutManager(this));
//set FloatingActionButton
actionButton = (ActionButton) findViewById(R.id.main_addMark);
actionButton.setOnClickListener(actionButtonListener);
//set DetailView
TextView detailTV = (TextView) findViewById(R.id.main_Average);
detailTV.setOnClickListener(showDetailListener);
}
@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_main, menu);
return true;
}
@Override
protected void onResume() {
adapter.notifyDataSetChanged();
try {
dataBase.open();
} catch (Exception e) {
e.printStackTrace();
}
actionButton.show();
super.onResume();
}
@Override
protected void onPause() {
dataBase.close();
super.onPause();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
try {
dataBase.open();
} catch (Exception e) {
e.printStackTrace();
}
markList.setAdapter(new MainMarkAdapter(this, dataBase.getDataMark(), this));
}
} else if (requestCode == 2) {
if (resultCode == RESULT_OK) {
try {
dataBase.open();
} catch (Exception e) {
e.printStackTrace();
}
int selectedIndex = data.getExtras().getInt("index");
System.out.println(selectedIndex);
dataBase.getDataMark().remove(selectedIndex);
markList.setAdapter(new MainMarkAdapter(this, dataBase.getDataMark(), this));
adapter.notifyItemRemoved(selectedIndex);
adapter.notifyItemRangeChanged(selectedIndex, dataBase.getDataMark().size());
dataBase.close();
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.actionStudentID) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.actionSubjects) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.actionTestTypes) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.actionCalculator) {
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.main_addMark) {
actionButton.hide();
Toast.makeText(this, "Toastie", Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(MainActivity.this, DetailMarkActivity.class);
//transfer Data to CreateMarkActivity
intent.putExtra("selectedRow", position);
MainActivity.this.startActivityForResult(intent, 2);
}
}
And here is the code I written for the OnClickListener:
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.detailMark_deleteButton) {
try {
dataBase.open();
} catch (Exception e) {
e.printStackTrace();
}
dataBase.deleteMark(selectedIndex);
dataBase.close();
Intent deleteReturnIntent = new Intent();
deleteReturnIntent.putExtra("index", selectedIndex);
setResult(RESULT_OK, deleteReturnIntent);
finish();
}
}
};
And now the delete-method for my database:
public void deleteMark(int index) {
database.delete(DATABASE_MARKTABLE, KEY_ROWID + "=" + index, null);
}
So when i tapped the button nothing happened... There are all items inside the recyclerView like before. What did I wrong? Can anyone help me?
Thank you very much!
Aucun commentaire:
Enregistrer un commentaire