Ciao sono bloccato su un comando lanciato da un context menu, che dovrebbe cancellare la riga nel database e ricaricare le righe in list view.
questa e' la classe con il context menu comando delete(accorciata che non entrava)
codice:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 123) {
String string = data.getExtras().getString(getActivity().getPackageName());
Log.d("FragmentAsList", "stringa dall altra activity: " + string);
Toast.makeText(getActivity(), string, Toast.LENGTH_LONG).show();
///database insert
today.setToNow();
String timeCurrent = today.format("%Y-%m-%d %H:%M:%S");
myDb.insertRow(string, timeCurrent, null, null);
//database query
Cursor cursor = myDb.getallRows();
String[] fromFieldNames = new String[]{Db.ROW_TASK};
int[] toViewId = new int[]{R.id.text_row};
SimpleCursorAdapter myCursorAdapter;
myCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.textview_pretty_cool, cursor, fromFieldNames, toViewId, 0);
listView.setAdapter(myCursorAdapter);
}
}
@Override
public View onCreateView(LayoutInflater inflater, @nullable ViewGroup container, @nullable Bundle savedInstanceState) {
View hiddenList = inflater.inflate(R.layout.fragment_as_list, container, false);
//We are inside a fragment, we have to speak with the compiler !
registerForContextMenu(listView);
Cursor cursor = myDb.getallRows();
String[] fromFieldNames = new String[]{Db.ROW_TASK};
int[] toViewId = new int[]{R.id.text_row};
SimpleCursorAdapter myCursorAdapter;
myCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.textview_pretty_cool, cursor, fromFieldNames, toViewId, 0);
listView.setAdapter(myCursorAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("ivano.android.com.ucanote.FragmentAsList", "onItemClick (line 115): tocca posizione: " + position);
//TODO make a new activity where you have a causal motivational thing etc
// Intent explicitIntent =new Intent(getActivity(),DetailNote.class);
// startActivity(explicitIntent);
}
});
return hiddenList;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater mi = getActivity().getMenuInflater();
mi.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
Log.d("ivano.android.com.ucanote.FragmentAsList", "onContextItemSelected (line 148): toccato");
switch (item.getItemId()) {
case R.id.delete:
//TODO delete
registerForContextMenu(listView);
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
long index = info.position;
Log.d("ivano.android.com.ucanote.FragmentAsList", "onContextItemSelected (line 160): the position is " + index);
//TODO first content provider
myDb.deleteRow(index);
Cursor cursor = myDb.getallRows();
String[] fromFieldNames = new String[]{Db.ROW_TASK};
int[] toViewId = new int[]{R.id.text_row};
SimpleCursorAdapter myCursorAdapter;
myCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.textview_pretty_cool, cursor, fromFieldNames, toViewId, 0);
listView.setAdapter(myCursorAdapter);
break;
case R.id.edit:
break;
case R.id.share:
break;
}
return super.onContextItemSelected(item);
}
}
e questo il database su cui viene eseguito il comando delete row e dopo getallrows
codice:
package ivano.android.com.ucanote.ivano.android.com.ucanote.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by ivano on 4/8/2015.
*/
public class Db {
private static final String TAG="Db";
//TODO check if all the fields are used,
// expecially TAG, ALL KEYS and columns, and what is the function of DB info?
//fields
public static final String ROW_ID = "_id";
public static final String ROW_TASK = "task";
public static final String ROW_DATE = "date";
public static final String ROW_URGENCY = "urgency";
public static final String ROW_TAG= "tag";
public static final String[] ALL_ROWS=new String[]{ROW_ID,ROW_TASK,ROW_DATE,ROW_URGENCY,ROW_TAG};
//Columns
public static final int COL_ID = 0;
public static final int COL_TASK = 1;
public static final int COL_DATE = 2;
public static final int COL_URGENCy = 3;
public static final int COL_TAG=4;
//DB info
public static final String DATABASE_NAME = "db";
public static final String DATABASE_TABLE="table1";
//always remember to change this if I are going to update the DB!
public static final int DATABASE_VERSION=1;
//create
private static final String DATABASE_CREATE_SQL=
"CREATE TABLE " + DATABASE_TABLE
+ " (" + ROW_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ROW_TASK+ " TEXT NOT NULL, "
+ROW_DATE+ " TEXT, "
+ROW_URGENCY+" TEXT, "
+ROW_TAG+" TEXT " +
" );";
private final Context context;
private DatabaseHelper myDBHelper;
private SQLiteDatabase db;
public Db (Context ctx) {
this.context = ctx;
myDBHelper=new DatabaseHelper(context);
}
public Db open() {
db= myDBHelper.getWritableDatabase();
return this;
}
public void close(){
myDBHelper.close();
}
public long insertRow (String task,String date, String urgency, String tag) {
ContentValues initialValues = new ContentValues();
initialValues.put(ROW_TASK, task);
initialValues.put(ROW_DATE, date);
initialValues.put(ROW_URGENCY, urgency);
initialValues.put(ROW_TAG, tag);
return db.insert(DATABASE_TABLE,null,initialValues);
}
//delete a row from the db by _id
public boolean deleteRow(long rowId) {
String where =ROW_ID+"="+ rowId;
return db.delete(DATABASE_TABLE,where,null) != 0;
}
public void deleteAll(){
Cursor c=getallRows();
long rowId=c.getColumnIndex(ROW_ID);
if (c.moveToFirst()) {
do {
deleteRow(c.getLong((int) rowId));
}
while (c.moveToNext());
}
c.close();
}
public Cursor getallRows(){
String where=null;
Cursor c=db.query(true,DATABASE_TABLE,ALL_ROWS,where,null,null,null,null,null);
if (c!= null){
c.moveToFirst();
}
return c;
}
public Cursor getRow(long rowId){
String where =ROW_ID+"=" +rowId;
Cursor c=db.query(true,DATABASE_TABLE,ALL_ROWS,where,null,null,null,null,null);
if(c!= null){
c.moveToFirst();
}
return c;
}
public boolean updateRow(long rowId,String task,String date, String urgency,String tag){
String where =ROW_ID+"="+rowId;
ContentValues newValues =new ContentValues();
newValues.put(ROW_TASK,task);
newValues.put(ROW_DATE, date);
newValues.put(ROW_URGENCY, urgency);
newValues.put(ROW_TAG, tag);
return db.update(DATABASE_TABLE,newValues,where,null)!=0;
}
private static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper(Context context){
super (context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG,"Upgrading application's database from version"
+oldVersion+ " to "+newVersion+
" ,which will destroy all the old data!");
db.execSQL("DROP TABLE IF EXISTS "+DATABASE_TABLE);
onCreate(db);
}
}
}